Python讀寫文件亂碼問題

對開發者來講,最惱人的問題之一莫過於讀寫文件的時候,因爲編碼千差萬別,出現亂碼問題。好難快速解決啊。。。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() 
相關文章
相關標籤/搜索