Python 3.6.1 - 将字符串打印为人类可读文本,特殊字符

时间:2017-05-03 22:30:16

标签: python string encoding locale decoding

我正在构建一个小的django 1.1应用程序(虽然我相信这个问题是特定于Python的)我已经开始使用命令来控制获取和分类数据的流程。我还希望使用第三个命令打印一种摘要。我正在使用macOS 10.12.3

我的问题来自于使用

获取文本数据并将其打印到控制台或文档
> or >>

在控制台中。

我正在使用Python 3.6.1的别名来运行这些脚本

我正在使用Tweepy api,但希望这不相关。

这些片段应说明我希望解决的问题:

print(type(data))
print(type(data.text))
try:
    print(data.text)
except UnicodeEncodeError:
    print("no printing today :(")
print(type(data.text.encode('UTF-8')))
print(data.text.encode('UTF-8'))

此输出:

<class 'tweepy.models.Status'>
<class 'str'>
no printing today :(
<class 'bytes'>
b'kontroll p\xc3\xa5 ... v\xc3\xa5pen.'

丑陋的事情应该都是'å'。

这是引发的错误:

UnicodeEncodeError: 'ascii' codec can't encode character '\xe5' in position 223: ordinal not in range(128)

它表示'ascii'编解码器,但正在执行(在我的Python 3.6.1脚本中):

print(sys.getdefaultencoding())

输出:

utf-8

正在运行

print(sys.getdefaultencoding())

再次在Python 2.7.10输出中:

ascii

因此抛出的错误与2.7.10输出匹配。我并不打算说我可能错误地认为默认编码器的作用是什么

我也试过

export LOCALE="no_NB.UTF-8"

试图看看这是否可能是由我的系统引起的(除非我误解了它的作用)。我没有把它写到任何文件中,认为它会在当前会话中持续存在。

是否以某种方式使用了错误的编码器?它可能是我的终端编码吗?如何将我的特殊字符写入终端和文件?字符串真的很难做到吗?

非常感谢任何帮助!!

1 个答案:

答案 0 :(得分:0)

设置

export LC_ALL=no_NO.UTF-8
export LANG=no_NO.UTF-8
在我的.bash_profile中的

现在允许我在终端中看到我想要的字符,并且它也成功地回显到文件中。