首页 > python 字典中有中文写入文件后变成编码

python 字典中有中文写入文件后变成编码

coding:utf-8

import codecs
fp = codecs.open('test.txt', 'w', 'UTF-8')
a = [{'name': '北京', 'zone': 10}, {'name': '重庆', 'zone': 20}]
fp.write(str(a))
fp.close()

cat test.txt
[{'name': '\xe5\x8c\x97\xe4\xba\xac', 'zone': 10}, {'name': '\xe9\x87\x8d\xe5\xba\x86', 'zone': 20}]
如何让中文写入文件后依然是中文呢?


import sys
sys.setdefaultencoding("utf-8")
a = [{'name': u'北京', 'zone': 10}, {'name': u'重庆', 'zone': 20}]

这样试试看。


修改你操作系统的文件编码


其实你在第3行后,保存的就是cat后的结果,如下:

import codecs
fp = codecs.open('test.txt', 'w', 'UTF-8')
a = [{'name': '北京', 'zone': 10}, {'name': '重庆', 'zone': 20}]
print a

'\xe5\x8c\x97\xe4\xba\xac',控制台信息输出窗口按照ascii编码输出utf8编码的字符串的结果。

你尝试调整你虚拟终端的显示编码看看


你需要借助于python的json模块处理数据的dump操作;

#!/usr/bin/python
# encoding:utf-8

import json

def dump(lst):
    fp = open("lst.utf8", "w")
    fp.write(json.dumps(lst, ensure_ascii=False))
    fp.close()

if __name__ == '__main__':
    dump([{'name': '北京', 'zone': 10}, {'name': '重庆', 'zone': 20}])

结果如下:

λ  ~/  python demo.py 
λ  ~/  cat lst.utf8 
[{"name": "北京", "zone": 10}, {"name": "重庆", "zone": 20}]

不能直接写呀,你需要dump你的字典,看楼上的json方案

【热门文章】
【热门文章】