11

假设我正在读取一个包含 3 个逗号分隔数字的文件。该文件以未知编码保存,到目前为止,我正在处理 ANSI 和 UTF-8。如果文件是 UTF-8 格式并且有 1 行的值为 115,113,12,那么:

with open(file) as f:
    a,b,c=map(int,f.readline().split(','))

会抛出这个:

invalid literal for int() with base 10: '\xef\xbb\xbf115'

第一个数字总是被这些 '\xef\xbb\xbf' 字符弄乱。对于其余 2 个数字,转换工作正常。如果我手动将 '\xef\xbb\xbf' 替换为 '' 然后进行 int 转换,它将起作用。

对于任何类型的编码文件,是否有更好的方法来执行此操作?

4

2 回答 2

17
import codecs

with codecs.open(file, "r", "utf-8-sig") as f:
    a, b, c= map(int, f.readline().split(","))

这适用于 Python 2.6.4。该codecs.open调用打开文件并以 unicode 格式返回数据,从 UTF-8 解码并忽略初始 BOM。

于 2010-03-02T00:01:27.477 回答
13

您看到的是 UTF-8 编码的BOM或“字节顺序标记”。BOM 通常不用于 UTF-8 文件,因此处理它的最佳方法可能是使用 UTF-8 编解码器打开文件,并跳过该U+FEFF字符(如果存在)。

于 2010-03-01T23:22:37.530 回答