Python unicode文件编写

时间:2013-11-30 22:13:20

标签: python json unicode utf-8

我正在使用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,问题就消失了。

2 个答案:

答案 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实例。

让它变得虚假,问题就会消失。