我正在使用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
,问题就消失了。
答案 0 :(得分:2)
jsonEncoder
有一个选项ensure_ascii
如果ensure_ascii为True(默认值),则为所有非ASCII字符 输出使用\ uXXXX序列进行转义,结果为str 仅包含ASCII字符的实例。
将其设为False
,问题就会消失。
答案 1 :(得分:0)
好吧,既然你不会将你的解决方案作为答案发布,我会的。这个问题不应该留下任何答案。
jsonEncoder有一个选项ensure_ascii
。
如果ensure_ascii为True(默认值),则输出中的所有非ASCII字符都使用\ uXXXX序列进行转义,结果是仅包含ASCII字符的str实例。
让它变得虚假,问题就会消失。