2012-02-17 58 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猜测;在打开文件时明确指定编码。