對開發者來說,最惱人的問題之一莫過於讀寫文件的時候,由於編碼千差萬別,出現亂碼問題。好難快速解決啊。。。
最近我也遇到了這樣的問題,經研究,把大致的解決思路拿出來共享。
1. python中習慣首先聲明編碼類型
#!/usr/bin/python # -*- coding: <encoding name> -*- import sys reload(sys) sys.setdefaultencoding('utf-8')
PS:不一定所有文件都是 utf-8 編碼的,這里要注意啊。。。
2. 出現編碼問題時,首先查看下該文件的初始編碼方式,linux下命令為 :file -i filename
eg:當前文件的編碼為 “ISO-8859-1”,隨后就將Python中的”utf-8“做了相應修改
在讀取文件時,需要先解碼:
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()