【问题标题】:Python 3.6.1 - Printing string as human readable text, special charactersPython 3.6.1 - 将字符串打印为人类可读的文本、特殊字符
【发布时间】: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


【解决方案1】:

设置

export LC_ALL=no_NO.UTF-8
export LANG=no_NO.UTF-8

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

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2015-02-20
    相关资源
    最近更新 更多