2017-06-20 288 views
1

我使用Python 2.7的unicodecsv嵌入式模塊來讀取包含28種不同語言的單詞列的CSV文件,其中一些文件有重音和/或完全利用不同的字母/字符系統。我加載的CSV將UTF-8轉義字符讀取/解碼爲本機字符

with open(sourceFile, 'rU') as keywordCSV: 
    keywordList = csv.reader(keywordCSV, encoding='utf-8-sig', dialect=csv.excel) 

keywordList閱讀目前正在生產的Unicode轉義字符/序列,而不是本地字符符號。雖然這並不理想(理想情況下,我可以從一開始就將csv中的unicode加載爲本地字符符號),但只要我可以在腳本中稍後將這些符號轉換爲本地字符符號(在導出爲無論哪種文件類型都會使這個最簡單)。這是如何做的,或者最好是理想的情況?我試圖使用變通方法,如these無濟於事,我仍然不確定這是腳本中的解釋器問題還是編碼問題。

讀取文件時,我已經使用utf-8-sig的原因是,沒有這樣做,是導致(BOM

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

,但是現在已經停止發生的原因不爲人知我。同樣,打開文件不這樣做,當我使用'rU'產生

_csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode? 

,但我不知道如果這些都是適當的。

this問題,通過在天然字符中的一個的結果打印每一個字符一個正在打印(一些也適用於從終端運行時我的代碼),是有通過人物迭代和轉換每一個的方式到它的本土特徵?

對於在這個已經飽和的話題上發佈另一個問題的道歉,但我還沒有能夠得到其他人的建議,爲這種情況下工作。也許我一直在尋找錯誤的地方,試圖解碼腳本末尾的編碼csv輸出,而問題出在我的csv.readerencoding。任何幫助將非常感激。

+1

編解碼器可能是更好的選項來讀取非ascii字符的文件。 https://docs.python.org/2/library/codecs.html, –

+1

檢查一下,它與你有關。 https://codepoints.net/U+FEFF –

+0

我試過多個'.encode()'和'.decode()'組合,但沒有成功。你將如何去實現編解碼器? –

回答

1

你所看到的是你的Unicode字符的repr()。在Python 2.7中,repr()通常只顯示ASCII字符。 ASCII範圍之外的字符使用轉義顯示。這是爲了調試目的,使當前代碼頁不支持非打印字符或字符可見。如果你想看到的字符呈現,打印出來,但請注意,不是由終端的配置代碼頁不支持的字符可能無法正常工作:

>>> s = u'\N{LATIN SMALL LETTER E WITH ACUTE}' 
>>> s 
u'\xe9' 
>>> print repr(s) 
u'\xe9' 
>>> print s 
é 
>>> print unicode(s) 
é 

在下列情況下,字符不被配置代碼支持頁437:

>>> s = u'\N{HORIZONTAL ELLIPSIS}' 
>>> s 
u'\u2026' 
>>> print s 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\dev\Python27\lib\encodings\cp437.py", line 12, in encode 
    return codecs.charmap_encode(input,errors,encoding_map) 
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2026' in position 0: character maps to <undefined> 
+0

感謝您澄清問題。我想編寫本地字符(不是Unicode轉義序列,這是當我使用utf-8編碼調用'json.dumps()'時寫入的內容)到JSON文件,我該怎麼做? –