【发布时间】:2013-11-30 22:13:19
【问题描述】:
我正在使用 twitter python 库从公共流中获取一些推文。该库以 json 格式获取推文并将其转换为 python 结构。我要做的是直接获取json字符串并将其写入文件。在 twitter 库中,它首先读取网络套接字并将.decode('utf8') 应用于缓冲区。然后,它将信息包装在 python 结构中并返回它。我可以使用 jsonEncoder 将其编码回 json 字符串并将其保存到文件中。但是我猜字符编码有问题。当我尝试打印 json 字符串时,它在控制台中打印得很好。但是当我尝试将其写入文件时,会出现一些字符,例如\u0627\u0644\u0644\u06be\u064f
我尝试使用不同的编码打开保存的文件,但没有任何改变。它假设是 utf8 编码,当我尝试显示它时,应该将那些特殊字符替换为它们所代表的实际字符。我在这里错过了什么吗?我怎样才能做到这一点?
更多信息:
我正在使用 python 2.7
我这样打开文件:
json_file = open('test.json', 'w')
我也试过这个:
json_file = codecs.open('test.json', 'w', 'utf-8')
什么都没有改变。我在json字符串上盲目地尝试了.encode('utf8'),.decode('utf8'),结果是一样的。我尝试了不同的文本编辑器来查看写入的文本,我使用cat 命令在控制台中查看文本,那些以\u 开头的字符仍然出现。
更新:
我解决了这个问题。 jsonEncoder 有一个选项ensure_ascii
如果 ensure_ascii 为 True(默认),则所有非 ASCII 字符在 输出使用 \uXXXX 序列进行转义,结果为 str 仅由 ASCII 字符组成的实例。
我做到了False,问题就消失了。
【问题讨论】:
-
您使用的是什么版本的python,能否请您附上您用来打开文件的代码?我的猜测是您使用的是 Python 2.x,并且在打开文件时没有设置编码。
-
我更新了问题。
-
写入文件时是否进行了编码?你最好给出样本数据来说明问题。
-
我使用了编解码器模块并使用utf8编码对数据进行了编码。
-
请不要将答案放在问题中。而是将其作为答案发布。