Python:使用UTF-8编码读取德语/西班牙语CSV文件

时间:2014-10-07 09:48:25

标签: python csv unicode encoding utf-8

我有一个关于打开和读取使用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 ']

发生了什么,我该如何解决这个问题?谢谢你的帮助!

1 个答案:

答案 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'是相同的字符串。

(如果您使用正确的分隔符,而非;,则会更清楚。)