python - 无法从 JSON 对象在 Python 中打印字符 '\u2019'

标签 python encoding printing python-3.x

作为帮助我学习 Python 的项目,我正在使用 json 数据(例如 www.reddit.com/all/.json)制作 Reddit 的 CMD 查看器。当出现某些帖子并且我尝试打印它们时(我认为这是导致错误的原因),我收到此错误:

追溯(最近的调用最后): 文件“C:\Users\nsaba\Desktop\reddit_viewer.py”,第 33 行,位于 print ( "%d. (%d) %s\n"% (i+1, obj['data']['score'], obj['data']['title']))

文件“C:\Python33\lib\encodings\cp437.py”,第 19 行,编码 返回 codecs.charmap_encode(输入、self.errors、encoding_map)[0] UnicodeEncodeError: 'charmap' 编解码器无法对字符 '\u2019' 进行编码 32: 字符映射到

这里是我处理数据的地方:

request = urllib.request.urlopen(url)
content = request.read().decode('utf-8')
jstuff = json.loads(content)

我用来打印上面错误中列出的数据的行:

print ( "%d. (%d) %s\n" % (i+1, obj['data']['score'], obj['data']['title']))

谁能告诉我哪里可能出错了?

最佳答案

几乎可以肯定您的问题与您显示的代码无关,并且可以在一行中重现:

print(u'\2019')

如果您的终端的字符集无法处理 U+2019(或者如果 Python 对您的终端使用的字符集感到困惑),则无法打印出来。它是来自 JSON 还是其他任何地方都没有关系。

Windows 终端(又名“DOS 提示符”或“cmd 窗口”)通常配置为像 cp1252 这样的字符集,它只知道 110000 个字符中的大约 256 个,如果不对语言实现。*

参见 PrintFails在 Python Wiki 上获取详细信息、解决方法和指向更多信息的链接。这个问题在 SO 上也有几百个重复(尽管其中许多将特定于 Python 2.x,没有提及)。


* Windows 有一整套独立的 API 用于将 UTF-16 打印到终端,因此 Python 可以检测到 stdout 是 Windows 终端,如果是,则编码为 UTF-16 并使用特殊的 API 而不是编码到终端的字符集并使用标准字符集。但这引发了一系列不同的问题(例如,打印到 stdout 的不同方式不同步)。已经讨论过进行这些更改,但即使每个人都同意并且补丁是明天编写的,在您升级到添加了它的 Python 的任何 future 版本之前,它仍然无济于事……

关于python - 无法从 JSON 对象在 Python 中打印字符 '\u2019',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473794/

相关文章:

python - 如何在扭曲服务器内与 redis 或 memcache 建立持久连接

Python:确定列表的所有项目是否都是同一个项目

php - 将 SQL_Latin1_General_CP1_CI_AS 编码为 UTF-8

c# - 如何以编程方式打印 PrintDocument 中的特定页面?

python - 包含字典的 sqlalchemy 映射对象

python - 检查 False 的正确方法是什么?

python - 在这种情况下,python 中的 MySQLdb 模块是否返回 utf8 编码或 unicode?

postgresql - 从 PostgreSQL 导出的编码问题

python - 网页抓取打印换行符

javascript - 在 IE7 中控制打印尺寸