【问题标题】:Make utf8 readable in a file使文件中的 utf8 可读
【发布时间】:2013-06-17 09:05:03
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 但是当使用ensure_ascii=False 转储数据时,我得到了这个'ascii' codec can't encode character u'\u0982' in position 1: ordinal not in range(128) 错误。当我使用默认值(即 True 转储时,为第一个键 \u0982 生成此错误
  • @knoxxs: 过失,确实是json.dump() 输出然后生成Unicode 值并且not 编码。更新为包含一种写入数据并为您编码的方法。
【解决方案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 实例。 ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多