1

我有这个字符串列表..

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"]
4

2 回答 2

6

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

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

>>> 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()了 which 直接写入文件而不是json.dumps().

于 2013-06-04T16:33:53.863 回答
4

u"čeština不是有效的 JSON。据我所知,JSON 字符串中也不能包含多字节字符(即它也是无效的),但我无法支持。

["\u010de\u0161tina"]是有效的 JSON。解析时,可以从\u部分中解码 UTF-8 字符。为了让您安心,请打开浏览器控制台,键入"\u010de\u0161tina"并点击Enter并查看打印的字符串。

于 2013-06-04T16:03:44.580 回答