【问题标题】:Python unicode file writingPython unicode 文件写入
【发布时间】: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编码对数据进行了编码。
  • 请不要将答案放在问题中。而是将其作为答案发布。

标签: python json unicode utf-8


【解决方案1】:

jsonEncoder 有一个选项 ensure_ascii

如果 ensure_ascii 为 True(默认),则所有非 ASCII 字符在 输出使用 \uXXXX 序列进行转义,结果为 str 仅由 ASCII 字符组成的实例。

设为False,问题就会消失。

【讨论】:

    【解决方案2】:

    好吧,既然你不会发布你的解决方案作为答案,我会的。这个问题不应该没有答案。

    jsonEncoder 有一个选项ensure_ascii

    如果 ensure_ascii 为 True(默认值),则输出中的所有非 ASCII 字符都使用 \uXXXX 序列进行转义,结果是仅由 ASCII 字符组成的 str 实例。

    将其设为 False,问题就会消失。

    【讨论】:

      猜你喜欢
      • 2012-08-30
      • 2011-06-25
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 2018-01-28
      相关资源
      最近更新 更多