Python读取文件,检测文件编码及去除UTF8 BOM

对于Python来说,什么都好,就是编码问题真是让人头疼。当然,明白原理后自然没什么了,可各种命令行窗口、IDE的实现不同,导致此问题更糟糕。

之前使用的时候,应该是把Python的处理方式搞懂了的,但是今天忘了处理UTF-8文件头BOM这件事。

Python问题解决参考:http://blog.csdn.net/lxdcyh/article/details/4018054

先在来讲一下关于检测文件编码。使用的是chardet(点击这里查看)模块。下面这个函数包括了自动检测文件编码,及当文件为UTF-8时,自动去除BOM的问题:


import chardet
import codecs
"""
返回文件的列表,以unicode的方式保存
"""
def readFile(filePath):
    finput = open(filePath, "r")
    str = finput.readline() + finput.readline() #在文件中多读取一行是因为,如果一行文字太少,编码检测有可能错误,按自己要求调整
    codeType = chardet.detect(str)["encoding"]  #检测编码方式
    print u"编码是 ", codeType
    finput.seek(0)   #转回到文件开头
    if codeType == "UTF-8":
        bom = codecs.BOM_UTF8[:].decode("utf-8")#考虑去除文件头的BOM
        content = [line.decode(codeType) 
                   if line.decode(codeType)[:1] != bom
                   else line.decode(codeType)[1:] 
                   for line in finput]
    else:
        content = [line.decode(codeType) for line in finput]
    finput.close()
    return content



里面的有几行代码比较多余,只是为了讲个明白,大家可根据自己来更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值