我有一个关于使用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 ']
发生了什么事,我该如何解决?谢谢您的帮助!
UnicodeEncodeError:'ascii'编解码器无法在位置0编码字符u'\ ufeff'
读取CSV没问题。这是将print
其添加到控制台的问题。您的控制台不支持Unicode,因此无法从CSV文件的前面打印U + FEFF字节顺序标记字符。(通常将人造BOM放在UTF-8 CSV文件中,因为Excel否则不会读取它们。)
使用MS C运行时stdlib的应用程序在Windows控制台上对于Unicode而言基本上是无效的。打印失败
幸运的是,我再也没有收到错误,但我的输出中仍然有这些奇怪的字符(在最后一行):
您在此处打印行,而不是单个值。每行是一个字符串列表。当您打印列表时,它以repr
表格形式出现,因此您的字符串以Python字符串文字形式打印。u'ni\xf1o'
和u'niño'
是相同的字符串。
(如果您使用正确的定界符,
而不是,这会稍微清楚一些;
。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句