我有一个关于打开和读取使用Python在utf-8中编码的CSV文件的问题。我花了大部分时间浏览Stackoverflow主题和Python csv模块,但我似乎找不到合适的解决方案。我的CSV文件包含带有“特殊”字符的西班牙语和德语单词(ñ,é等),这是我文件的片段:
english_person,spanish_M,spanish_F,german_person
woman,mujer ,mujer ,Frau
strong,fuerte ,fuerte ,stark
boy,niño ,niño ,Junge
只是尝试使用编解码器模块阅读它不起作用:
import csv
import codecs
f = codecs.open('file.csv', 'rb', encoding='utf-8')
reader = csv.reader(f)
for line in reader:
print line
我收到此错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 0: ordinal not in range(128)
所以,我下载了unicodecsv模块并试图读取这样的文件:
import unicodecsv
myfile = open('file.csv')
data = unicodecsv.reader(myfile, encoding='utf-8', delimiter=';')
for row in data:
print row
我幸运的是不再出现错误,但我仍然在输出中得到这些奇怪的字符(在最后一行):
[u'\ufeffenglish_person,spanish_M,spanish_F,german_person']
[u'woman,mujer ,mujer ,Frau ']
[u'strong,fuerte ,fuerte ,stark ']
[u'boy,ni\xf1o ,ni\xf1o ,Junge ']
发生了什么,我该如何解决这个问题?谢谢你的帮助!
答案 0 :(得分:1)
UnicodeEncodeError:' ascii'编解码器不能对字符u' \ ufeff'进行编码。在位置0
读取CSV不是问题。这是print
到控制台的问题。您的控制台不支持Unicode,因此无法从CSV文件的正面打印U + FEFF字节顺序标记字符。 (在Excel中输入UTF-8 CSV文件中的虚假BOM很常见,否则不会读取它们。)
对于使用MS C运行时stdlib的应用程序,Windows控制台基本上是针对Unicode的。 PrintFails
我很幸运不会再出现错误,但我仍然在输出中得到这些奇怪的字符(在最后一行):
您在此处打印行,而不是单个值。每行都是一个字符串列表。当您打印列表时,它以repr
形式出现,因此您的字符串以Python字符串文字形式打印。 u'ni\xf1o'
和u'niño'
是相同的字符串。
(如果您使用正确的分隔符,
而非;
,则会更清楚。)