一些unicode特性的Python编码错误

问题描述:

我在编码一些unicode字符时遇到了一些问题。 这是我使用的代码:一些unicode特性的Python编码错误

test = raw_input("Test: ") 
print test.encode("utf-8") 

当我现在用的普通的ASCII字符它的工作原理,同样的一些“奇怪”的Unicode字符像☃。 但是当我使用的字符,如ß ä ö ü §它不能创造这样的错误:

Traceback (most recent call last): 
    File "C:\###\Test.py", line 5, in <module> 
    print test.encode("utf-8") 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xdf in position 0: ordinal not in range(128) 

请注意,我用的是PC,其中德国是默认的语言(所以这些字符是默认的字符)。

raw_input()返回一个字节字符串。您不需要编码该字节字符串,它已经编码为

然后会发生什么呢,Python将首先解码得到一个unicode值进行编码;你问Python编码,所以它会很好的尝试给你一些可以编码的东西。这是在这里失败的解码。隐式解码使用ASCII,这就是为什么你得到了一个UnicodeDecodeError例外(注意名称中的Decode)该编解码器。

如果你想产生一个unicode对象,你必须明确解码。使用的编解码器Python有stdin检测:

import sys 

test = raw_input("Test: ") 
print test.decode(sys.stdin.encoding) 

你不需要做这里因为你要打印,所以写右后卫,这将使用相同的编解码器的输入和输出相同的终端。刚刚收到该字节字符串时,编写用UTF-8编码的字节字符串就没有问题了。解码到unicode也不错,因为打印将自动编码为sys.stdout.encoding