我在utf8编码中有一个巨大的csv文件,但是一些编码与主文件编码不同的列。它看起来像:
UTF-8编码中的input.txt :
a,b,c
d,"e?",f
g,h,"kü"
win-1252中的 input.txt
a,b,c
d,"eü",f
g,h,"kü
代码:
import csv
file = open("input.txt",encoding="...")
c = csv.reader(file, delimiter=';', quotechar='"')
for itm in c:
print(itm)
和标准的python3 csv阅读器在这些行上产生编码错误。我不能忽略读取这一行,但我只需要总是好的编码" someOther"列。
使用标准的csv阅读器是否可以在某些"字节模式下以某种方式分割CSV数据"然后将每个数组元素转换为普通的python unicode字符串,还是应该实现自己的csv阅读器?
回溯:
Traceback (most recent call last):
File "C:\Development\t.py", line 7, in <module>
for itm in c:
File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 11: invalid start byte
答案 0 :(得分:4)
您对文件的UTF8编码有多确定?
对于您发布的小样本,enum {
value_one = 0,
value_two = 1,
value_three = 3,
value_max
}
for ( i = value_one; i < value_max; i++ )
{
switch(i)
{
case value_one:
case value_two:
case value_three:
case value_four:
{
/* ... Do something with valid enum value ... */
}
break;
default:
/* Found an invalid enum entry; ignore it */
break;
}
}
上的ü
失败了UTF8解码失败,这是&#34; LATIN SMALL LETTER U WITH DIAERESIS&#34;。当编码为ISO-8859-1时,ü
为'\xfc'
。另外两种可能性是CSV文件是UTF-16编码的(UTF-16小端在Windows上很常见),甚至是Windows-1252。
如果您的CSV文件是使用ISO-8859-X系列编码编码的;任何ISO 8859-1 / 3/4/9/10/14/15/16都将ü
编码为0xfc。
要解决此问题,请使用正确的编码并打开如下文件:
file = open("input.txt", encoding="iso-8859-1")
或者,对于Windows 1252:
file = open("input.txt", encoding="windows-1252")
或者,对于UTF-16:
file = open("input.txt", encoding="utf-16") # or utf-16-le or utf-16-be as required