對開發者來講,最惱人的問題之一莫過於讀寫文件的時候,因爲編碼千差萬別,出現亂碼問題。好難快速解決啊。。。python
最近我也遇到了這樣的問題,經研究,把大體的解決思路拿出來共享。linux
1. python中習慣首先聲明編碼類型json
#!/usr/bin/python # -*- coding: <encoding name> -*- import sys reload(sys) sys.setdefaultencoding('utf-8')
PS:不必定全部文件都是 utf-8 編碼的,這裏要注意啊。。。編碼
2. 出現編碼問題時,首先查看下該文件的初始編碼方式,linux下命令爲 :file -i filenamespa
eg:當前文件的編碼爲 「ISO-8859-1」,隨後就將Python中的」utf-8「作了相應修改code
在讀取文件時,須要先解碼:blog
str = str.decode("ISO-8859-1") ## 這樣返回的就是unicode的str
在寫入文件時,再用一樣的方式編碼(這裏暫且不提文件轉碼):
str = str.encode("ISO-8859-1")
例如,解析一段「ISO-8859-1」編碼的json,代碼以下
1 import json 2 3 Jstr = json.loads(str, encoding="ISO-8859-1") 4 ######## 5 ## handle sth to 」data「 6 ######## 7 print data.encode("ISO-8859-1")
這樣print 或 寫入的文件就不存在亂碼啦。
3:utf-8格式寫入文件
若是以上 json 文件是 utf-8 編碼,寫入後轉爲了 unicode,如今要寫入utf-8,能夠用以下方式:
import codecs
1 name='xxx.json' 2 f=codecs.open(name,'r',encoding='utf8') 3 of=codecs.open(name+'.txt','w', encoding='utf8') 4 for line in f: 5 dictdata=json.loads(line) 6 out=json.dumps(dictdata,indent=4, ensure_ascii=False) 7 of.write(out+'\n') 8 9 of.close()