在Python中处理UTF-8数字

在Python中处理UTF-8数字,python,utf-8,character-encoding,byte-order-mark,Python,Utf 8,Character Encoding,Byte Order Mark,假设我正在读取一个包含3个逗号分隔数字的文件。该文件是以未知编码保存的,到目前为止,我正在处理ANSI和UTF-8。如果文件为UTF-8格式,并且有一行值为115113,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”字符

假设我正在读取一个包含3个逗号分隔数字的文件。该文件是以未知编码保存的,到目前为止,我正在处理ANSI和UTF-8。如果文件为UTF-8格式,并且有一行值为115113,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转换,它将正常工作


对于任何类型的编码文件,有没有更好的方法可以做到这一点?

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

import codecs

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

这在Python2.6.4中起作用。
codecdes.open
调用打开文件并以unicode格式返回数据,从UTF-8解码并忽略初始BOM。

谢谢。这适用于我的UTF-8文件,但在Unicode和Unicode大端码上失败。有没有一种简单的方法可以打开任何类型的编码文件并获取这些数字,或者我必须显式地指定编码?好的,您必须指定编码。显然,您可以编写一个小函数来执行这三个测试并返回一个经过适当解码的文件。太好了。我在上面的代码中找到了chardet模块,它正好执行这个小错误:a,b,c=map(int,f.readline().split(“,”))