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

来源:互联网 发布:马穆鲁克王朝知乎 编辑:程序博客网 时间:2024/05/19 22:59

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

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

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

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


import chardetimport 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



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

原创粉丝点击