使utf8在文件中可读

时间:2013-06-20 13:22:05

标签: python python-2.7 encoding utf-8 character-encoding

我有字典字典,其中包含utf8编码密钥。我正在使用json模块将此字典转储到文件中 在文件中键以utf8格式打印。键实际上是孟加拉语的字母。

我希望在文件中写入实际的字母。 怎么做?

如果我打印出这些键(其中一个是你'),那么会显示控制台实际字母(ং),但是在我的文件中\u0982。打印用什么来显示实际的字母?

2 个答案:

答案 0 :(得分:2)

你正在写JSON; JSON标准允许\uxxxx转义序列编码非ASCII字符。 Python json模块默认使用它。

转储数据时使用ensure_ascii=False开关关闭此功能:

json.dump(obj, yourfileobject, ensure_ascii=False)

这意味着输出不再编码为UTF-8字节;您需要使用codecs.open()托管文件:

import json
import codecs

with codecs.open('/path/to/file', 'w', encoding='utf8') as output:
    json.dump(obj, output, ensure_ascii=False)

现在您的unicode字符将作为UTF-8编码的字节写入文件。当用另一个解码 UTF-8的程序打开文件时,你的代码点应该再次显示为相同的字符。

答案 1 :(得分:2)

使用ensure_ascii参数。

>>> import json
>>> print json.dumps(u'\u0982')
"\u0982"
>>> print json.dumps(u'\u0982', ensure_ascii=False)
"ং"

http://docs.python.org/2/library/json.html#json.dump

  

如果ensure_ascii为True(默认值),则为所有非ASCII字符   输出使用\ uXXXX序列进行转义,结果为str   实例仅由ASCII字符组成。如果ensure_ascii是   错误,写入fp的一些块可能是unicode实例。 ...