2014-10-07 68 views
1

我對使用Python打開和讀取utf-8編碼的CSV文件有疑問。我花了大部分時間瀏覽Stackoverflow主題和Python csv模塊,但我似乎無法找到合適的解決方案。我的CSV文件中包含有「特殊」人物西班牙語和德語的話,這是我的文件的一個片段(N,E等):Python:使用UTF-8編碼讀取德文/西班牙文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

那奇怪的字符都像$字符,€,和等。 – 2014-10-07 09:53:20

+0

在我的輸出中出現的奇怪字符我的意思是最後一行中的'\ xf1'部分,它似乎將'ñ'放在'niño'這個字中。 – Alice 2014-10-07 10:00:39

+0

檢查您的CSV: 德語中沒有單詞「fuerte」。 也許你想要「führte」(過去的「führen」[領導]) – ngulam 2014-10-07 13:17:33

回答

1

UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 0

這不是讀取CSV的問題。這是一個問題print它的控制檯。您的控制檯不支持Unicode,因此無法從CSV文件的前面打印U + FEFF字節順序標記字符。 (通常將人造BOM放在UTF-8 CSV文件中,否則Excel將不會讀取它們。)

對於使用MS C運行時stdlib的應用程序的Unicode,Windows控制檯基本上已損壞。 PrintFails

I luckily don't get an error anymore, but I still get these strange characters in my output (in the last line):

您在這裏打印行,而不是單個值。每一行都是一個字符串列表。當你打印一個列表時,它會以repr的形式出現,所以你的字符串是用Python字符串文字形式打印的。 u'ni\xf1o'u'niño'是相同的字符串。

(這是稍微更清晰,如果你使用正確的分隔符,而非;。)

+0

謝謝,這很有道理! – Alice 2014-10-07 17:05:08

相關問題