在Python中处理UTF-8数字
假设我在读取一个文件,这个文件里有3个用逗号分隔的数字。这个文件的编码方式我不太清楚,目前我尝试过ANSI和UTF-8。如果这个文件是UTF-8格式的,里面有一行数据是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'搞得乱七八糟。后面两个数字的转换倒是没问题。如果我手动把'\xef\xbb\xbf'替换成空字符串,然后再进行整数转换,就能正常工作。
有没有更好的方法来处理任何编码类型的文件呢?
2 个回答
13
你看到的这个是一个UTF-8编码的字节顺序标记,简称BOM。通常情况下,UTF-8文件里不太会用到这个标记。所以处理这个问题的最好方法是用UTF-8的编码方式打开文件,如果里面有这个U+FEFF
字符,就跳过它。
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(字节顺序标记)。