Skip to main content
 首页 » 编程设计

python之json 和编码字符串

2025年05月04日21zhengyun_ustc

我有这个字符串列表..

mylist = [u"čeština", u"maďarština", u"francouština"] 

我需要将它转储到一个文件中,我正在为此使用 JSON

text = json.dumps(mylist) 
FILE = open("file.txt", 'w') 
FILE.write(text) 
FILE.close() 

但是当我在编辑器(使用 utf-8)中打开文件时,我看到了

["\u010de\u0161tina", "ma\u010far\u0161tina", "francou\u0161tina"] 

当我从文件中读取列表时,我得到了正确的值。 但是这个文件也应该以用户友好的方式显示,我也希望..

["čeština", "maďarština", "francouština"] 

或至少

[u"čeština", u"maďarština", u"francouština"] 

请您参考如下方法:

当您执行 json.dumps([u"čeština", u"maďarština", u"francouština"]) 时,您将获得字符串 '["\\u010de\u0161tina ", "ma\\u010far\u0161tina", "francou\\u0161tina"]'(使用有效的 Python 字符串文字形式)。 \u 转义符是 Unicode 在 JSON 中的表示方式,Python 的 JSON 模块默认会将所有非 ascii 字符转换为 Unicode 转义符。您可以通过在 json.dumps() 参数中使用 ensure_ascii=False 来禁用此行为。

这里有几个例子,首先是默认行为:

>>> json.dumps(lst) 
'["\\u010de\\u0161tina", "ma\\u010far\\u0161tina", "francou\\u0161tina"]' 
>>> print json.dumps(lst) 
["\u010de\u0161tina", "ma\u010far\u0161tina", "francou\u0161tina"] 

并且使用ensure_ascii=False:

>>> json.dumps(lst, ensure_ascii=False) 
u'["\u010de\u0161tina", "ma\u010far\u0161tina", "francou\u0161tina"]' 
>>> print json.dumps(lst, ensure_ascii=False) 
["čeština", "maďarština", "francouština"] 

现在要确保您使用 utf-8 编写此 Unicode 字符串,您可以使用 codecs模块:

import codecs, json 
lst = [u"čeština", u"maďarština", u"francouština"] 
json.dump(lst, codecs.open('file.txt', 'w', 'utf-8'), ensure_ascii=False) 

请注意,我还使用了 json.dump(),它直接写入文件而不是 json.dumps()。