2017-05-03 53 views
2

我正在构建一个Django 1.1应用程序(尽管我相信这个问题是针对Python的),我已经使用命令来控制流获取和分类数据。我也希望使用第三个命令打印一个摘要。我使用的MacOS 10.12.3Python 3.6.1 - 打印字符串作为人类可读文本,特殊字符

我的问题来自于获取文本数据,并将其打印到控制台,或在控制台中使用

> 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.' 

的丑陋的东西存在都应该是字符“a”。

这是将被抛出的错误:

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" 

,试图看看是否可以通过我的系统造成的(除非我的可能性误解这是什么)。我没有把它写到任何文件中,认为它会在当前会话中持续存在。

是否错误地使用了错误的编码器?它可能是我的终端编码?我怎样才能将我的特殊字符写入终端和文件?弦真的很难得到正确吗?

任何帮助非常感谢!

+0

问题很可能是您的*终端仿真程序*不支持Unicode字符,或者设置为使用ASCII编码,因此当您打印*时出现'UnicodeEncode'错误。当你编码一个字符串时,它会返回一个字节对象,它总是会在ascii序数范围外有一个“难看的”表示形式,除非你解码它*(或者你的情况,不要编码它)。 –

+1

你确定这个''no_NB.UTF-8“'是一个可用的语言环境吗?尝试'locale -a | grep“no_NB.UTF-8”'在你的shell中。我无法在我的机器上找到它,(osx 10.12.4),但我确实找到了'no_NO.UTF-8' –

回答

0

设置

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

现在让我看到我想在我的终端的字符,它也成功地回显到一个文件中。