我有这个字符串列表..
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"]
答案 0 :(得分:6)
执行json.dumps([u"čeština", u"maďarština", u"francouština"])
时,您将获得字符串'["\\u010de\u0161tina", "ma\\u010far\u0161tina", "francou\\u0161tina"]'
(使用有效的Python字符串文字形式)。 \u
转义是如何在JSON中表示Unicode,并且Python的JSON模块将默认将所有非ascii字符转换为Unicode转义。您可以在ensure_ascii=False
参数中使用json.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()
直接写入文件而不是json.dumps()
。
答案 1 :(得分:4)
u"čeština
无效JSON。据我所知,你不能在JSON字符串中有多字节字符(即它也无效),但我不能支持它。
["\u010de\u0161tina"]
是有效的JSON。解析时,可以从\u
部分解码UTF-8字符。为了安心起见,请打开浏览器控制台,键入"\u010de\u0161tina"
并按 Enter 并查看打印的字符串。