假设我读含有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转换它将工作。

是否有这样做的任何类型的编码文件的一个更好的办法?

有帮助吗?

解决方案

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。

其他提示

你看到的是UTF-8编码的 BOM ,或“字节顺序标记”。 BOM不需要通常用于UTF-8的文件,所以最好的方法来处理它可能是打开与一个UTF-8编码解码器的文件,并跳过如果U+FEFF字符存在。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top