Mel*_*oun 1 python encoding json
我有这个字符串列表..
mylist = [u"?eština", u"ma?arština", u"francouština"]
Run Code Online (Sandbox Code Playgroud)
我需要将其转储到一个文件中,我正在使用JSON
text = json.dumps(mylist)
FILE = open("file.txt", 'w')
FILE.write(text)
FILE.close()
Run Code Online (Sandbox Code Playgroud)
但是当我在编辑器中打开文件时(使用utf-8)我明白了
["\u010de\u0161tina", "ma\u010far\u0161tina", "francou\u0161tina"]
Run Code Online (Sandbox Code Playgroud)
当我从文件中读取列表时,我得到正确的值.但是这个文件也应该是用户油炸的,我也期待..
["?eština", "ma?arština", "francouština"]
Run Code Online (Sandbox Code Playgroud)
或至少
[u"?eština", u"ma?arština", u"francouština"]
Run Code Online (Sandbox Code Playgroud)
当你这样做时,json.dumps([u"?eština", u"ma?arština", u"francouština"])你将获得字符串'["\\u010de\u0161tina", "ma\\u010far\u0161tina", "francou\\u0161tina"]'(使用有效的Python字符串文字形式).该\u逃逸是Unicode的是如何在JSON表示,为Unicode转义默认Python的JSON模块将转换所有非ASCII字符.您可以通过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"]
Run Code Online (Sandbox Code Playgroud)
并与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"]
Run Code Online (Sandbox Code Playgroud)
现在要确保使用utf-8编写此Unicode字符串,您可以使用编解码器模块:
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)
Run Code Online (Sandbox Code Playgroud)
请注意,我还使用了json.dump()直接写入文件而不是json.dumps().
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |