python文件操作编码问题

相信使用过python的,都会遇到编码问题,尤其是python

我这里主要说的是对中文的操作遇到的一些问题

 

打开文件

#!/usr/bin/python
#-*-coding:utf-8-*- 

#文件
fileName = r"F:\python_pro\文档.txt"
fd = open(fileName.decode('utf8').encode("gbk"),"ab+") #打开正常,生成的文件名正确
#fd = open(fileName.decode('utf8'),"ab+") #打开正常,生成的文件名正确
#fd = open(fileName,"ab+") #fileName生成的文件名为乱码
fd.write(fileName)
fd.close()


由上可见,对于unicode去操作open是正常的,用str生成的文件不正常,是乱码。至于原因,找了好久,说是open最终使用的是系统的编码,对于str没有明确编码,比如操作系统的编码GB2312去解析utf8格式不成功。如果是unicode和gbk的str去,操作系统能解析。

 

可以查看下你的操作系统的编码:

import locale
print locale.getpreferredencoding()


我电脑输出为:

locale.getpreferredencoding(): cp936

 

读写操作

 

#!/usr/bin/python
#-*-coding:utf-8-*- 

import codecs
import sys
import chardet

#文件
fileName = r"F:\python_pro\文档.txt"
fd = open(fileName.decode('utf8').encode("gbk"),"ab+")

filename2 = "E:\doc\test配制.conf"
fd2 = codecs.open(filename2.decode('utf8'),"rb") #filename2是gdk编码,如果用utf-8打开会乱码
#fd2 = open(fileName.decode('utf8'),"r") #fileName文件编码为utf-8,如果用gdk打开,读出来的会乱码
str = fd2.read()
if str[:3] == codecs.BOM_UTF8:
    print "utf-8"
print chardet.detect(str)
fd.write(str)
# print str
fd2.close()
fd.close()

上面的例子用记事本打开文档.txt是正常的,没有乱码情况

所以:

1.如果读出来直接写到另外一个文件是不会出问题,相当于流的作用,读出是什么不用管

2.如果读出来的数据要做处理,或者输出什么,如果操作的文件格式跟我们coding:定义的不一致,直接使用会出现乱码,需要转换;

 

所以在对不知道这文件是什么编码的情况下,最好去判断下看能不能知道是什么编码,这样操作起来就方便多了


 

参考文章 http://www.cnblogs.com/huxi/articles/1897271.html  这文章对编码讲解的还可以

 

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值