Python编码错误与一些unicode字符

时间:2015-02-11 17:30:15

标签: python unicode encoding

我在编码一些unicode字符时遇到了一些问题。 这是我正在使用的代码:

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)

请注意,我使用的是德语是默认语言的电脑(因此这些字符是默认字符)。

1 个答案:

答案 0 :(得分:4)

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