Python 去掉BOM

Python 去掉BOM

BOM的全程是Byte Order Mark(定义字节顺序)。我们开发测试代码的时候,我们既希望它能在windows上运行,也希望它能在Linux上运行,也就是系统无关,那么在有些Windows系统上的文件中存在了BOM,这样在Linux上读取的时候就会出现读取问题,因此我们需要兼容去掉BOM的代码。

好好说说BOM

BOM的定义可以参考Byte order mark,具体就不在这里说了,感兴趣自己去看一下,但是在网页中使用带BOM的utf8会导致很多Browser显示乱码。对于文本来说,windows对带有BOM的utf8文档处理比较友好,因为Windows把Unicode识别代码集成进了API里,主要是CreateFile()。打开文本文件时它会自动识别并剔除BOM。
但是Unix系操作系统对带有BOM的utf8文档并不友好。这是因为UNIX脚本语言通行的首行#!标示,这东西依赖于shell解析,而很多shell出于兼容的考虑不检测BOM,所以加进BOM时shell会把它解释为某个普通字符输入导致破坏#!标示。

python去掉BOM

我们都想我们的测试脚步在任何地方都可以运行,兼容windows和linux,因此我们要去掉文本的BOM。BOM字符的表示是codecs.BOM_UTF8,那么要去除BOM就要使用如下代码打开文件(如下代码是基于Python3开发的,要是使用Python2的话,因为Python2的codecs.BOM_UTF8是str类型,因此要先转成unicode后才能做比较去除BOM)。

import codecs
with codecs.open("test.txt", "r", "utf_8_sig") as fr:
    for line in fr:
        print line

参考

  • 1、https://en.wikipedia.org/wiki/Byte_order_mark
  • 2、https://www.zhihu.com/question/20167122/answer/14199022
  • 3、https://my.oschina.net/JKOPERA/blog/309423

你可能感兴趣的:(Python 去掉BOM)