2012-02-17 72 views
1

使用Python 3.2,我試圖解碼使用STR(字節,「CP1251」)字節,但我得到這個錯誤:使用Python錯誤的編碼

Traceback (most recent call last): 
    File "C:\---\---\---\---.py", line 4, in <module> 
    writetemp.write(str(f.read(), "cp1251")) 
    File "C:\Python32\lib\encodings\cp1252.py", line 19, in encode 
    return codecs.charmap_encode(input,self.errors,encoding_table)[0] 
UnicodeEncodeError: 'charmap' codec can't encode characters in position 19-25: character  maps to <undefined> 

正如你所看到的,我指定了「CP1251」但它試圖使用「cp1252.py」來解碼,而不是「cp1251.py」,我認爲這會導致錯誤。如果我嘗試「Windows-1251」而不是「cp1251」,則會出現同樣的情況。

回答

5

注意你得到的是一個UnicodeEncodeError,而不是 a UnicodeDecodeError。該錯誤不是來自您的str(f.read(), "cp1251")呼叫。相反,它來自writetemp.write()電話。

str()呼叫使用cp1251作爲編碼解碼您從f.read()獲得的字節。這樣可行。這給了你一個字符串(在Python 3中是unicode)。writetemp.write()然後必須通過編碼將字符串轉換回字節。它通過使用在打開writetemp時通過的編碼或者默認的IO編碼(Python試圖根據各種事情猜測)來實現。您可以通過查看文件對象的encoding屬性來查看哪種編碼。你可能會發現它是cp1252。如果你想寫一個特定的編碼,不要依賴Python猜測;在打開文件時明確指定編碼。