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}]
如何让中文写入文件后依然是中文呢?

阅读 16.7k
5 个回答

你需要借助于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}]

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

其实你在第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编码的字符串的结果。

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

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

这样试试看。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题