3

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

我希望将实际字母写在文件中。这个怎么做 ??

如果我打印这些键(其中一个是 u'\u0982')到控制台,实际的字母(ং)会显示,但在我的文件中是 .is\u0982写的。print 做什么来显示实际的字母?

4

2 回答 2

2

您正在编写 JSON;JSON 标准允许\uxxxx转义序列对非 ASCII 字符进行编码。Pythonjson模块默认使用它。

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的程序打开文件时,您的代码点应再次显示为相同的字符。

于 2013-06-20T13:26:56.397 回答
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 序列进行转义,结果是仅由 ASCII 字符组成的 str 实例。如果 ensure_ascii 为 False,则写入 fp 的某些块可能是 unicode 实例。...

于 2013-06-20T13:27:02.883 回答