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() 
相关文章
相关标签/搜索