2016-03-15 51 views
0

我已經通過在堆棧溢出類似的問題閱讀,但他們不解決unicode的問題,我有:在位置302如何在閱讀帶有丹麥字符的文件時解決UnicodeDecodeError問題?

「ASCII」編解碼器不能解碼字節0xc3曾嘗試: 進口SYS 重裝( SYS) sys.setdefaultencoding函數( 「UTF-8」),然而

收到一個錯誤:NameError:名字 '刷新' 沒有定義

我嘗試讀取文件與丹麥元音:æ,O,A。作爲回報,接收'UnicodeDecodeError:'ascii'編解碼器無法解碼字節0xc3位置302等。 位置302,並進一步包括丹麥元音。有沒有辦法來解決這個問題?

到目前爲止,我已經嘗試將特殊格式的註釋作爲源代碼的第一行:# -*- coding: <ascii> -*-。沒有給出任何結果。

也試過:f = open(fname, encoding="ascii", errors="surrogate escape")。但不是閱讀包含字符的文件,例如在「Europæiske」這個詞中,我會得到「Europ \ udcc3 \ udca6iske」。

然後,我嘗試從博客(丟失鏈接到該博客)的建議,以「導入unicodedata」,但是,它沒有很好地解釋在哪裏把它形成。

import unicodedata 
import csv 

with open('File.csv') as f: 
    reader = csv.reader(f) 
    for row in reader: 
    print(row) 
+1

[UnicodeDecodeError:'ascii'編解碼器無法解碼位置23中的字節0xc3:序號不在範圍(128)]中的可能重複(http://stackoverflow.com/questions/24475393/unicodedecodeerror-ascii-codec-cant- decode-byte-0xc3-in-position-23-ordinal) – kchomski

+0

kchomski,不是試圖連接,而是用丹麥字符讀取文件,這是另一種情況! –

回答

3

只需用正確的編碼打開即可。您必須知道文件保存的編碼。西方版本的Windows可能是Windows-1252,或者可能是utf8。諸如chardet等模塊可以進行有根據的猜測。此外,對於csv模塊,配合newline=''開放以及(見文檔使用csv.reader

import csv 

with open('File.csv',encoding='utf8',newline='') as f: 
    reader = csv.reader(f) 
    for row in reader: 
    print(row) 
1

#-- coding:的是僅適用於什麼在程序本身使用,例如,如果你定義一個變量或丹麥字符功能

你要對付的是I/O,所以要記住以下規則:。在邊緣字節,Unicode的這裏面讀書的時候,和unicode.encode寫出來時,是指使用str.decode

+0

謝謝@jcomeau_ictx我現在更好地理解這個問題! –