【发布时间】:2017-10-01 22:24:41
【问题描述】:
我正在构建一个小的 django 1.1 应用程序(尽管我认为这个问题是特定于 Python 的),我已经开始使用命令来控制获取和分类数据的流程。我还希望使用第三个命令打印一种摘要。我正在使用 macOS 10.12.3
我的问题来自于获取文本数据并将其打印到控制台或使用的文档
> or >>
在控制台中。
我正在使用 Python 3.6.1 的别名运行这些脚本
我正在使用 Tweepy api,但希望它不相关。
这些 sn-ps 应该能说明我希望解决的问题:
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"
试图看看这是否是由我的系统引起的(除非我误解了它的作用)。我没有将它写入任何文件,认为它会在当前会话中持续存在。
是否以某种方式使用了错误的编码器?会不会是我的终端编码?如何将我的特殊字符写入终端和文件?字符串真的这么难搞定吗?
非常感谢任何帮助!
【问题讨论】:
-
问题可能是您的终端仿真器不支持unicode字符,或者设置为使用ASCII编码,因此打印时出现
UnicodeEncode错误。当您.encode一个字符串时,它会返回一个bytes对象,对于 ascii 序数范围之外的字节,该对象将始终具有“丑陋”的表示形式……除非您*解码*(或者在您的情况下,请避免编码它)。 -
您确定这个
"no_NB.UTF-8"是可用的语言环境吗?在你的 shell 中尝试locale -a | grep "no_NB.UTF-8"。我在我的机器上找不到它(osx 10.12.4),但我确实找到了no_NO.UTF-8
标签: python string encoding locale decoding