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



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

你可能感兴趣的:(python,编码,utf-8)