Python 一些 unicode 字符编码错误
Python Encoding error with some unicode characers
我在编码某些 Unicode 字符时遇到了一些问题。
这是我使用的代码:
test = raw_input("Test: ")
print test.encode("utf-8")
当我现在使用普通的 ASCII 字符时,它可以工作,与一些 "strange" 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)
请注意,我使用的是默认语言为德语的电脑(因此这些字符是默认字符)。
raw_input()
returns 一个 字节串 。您不需要对该字节字符串进行编码,它已经编码。
然后发生的是 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
.
我在编码某些 Unicode 字符时遇到了一些问题。 这是我使用的代码:
test = raw_input("Test: ")
print test.encode("utf-8")
当我现在使用普通的 ASCII 字符时,它可以工作,与一些 "strange" 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)
请注意,我使用的是默认语言为德语的电脑(因此这些字符是默认字符)。
raw_input()
returns 一个 字节串 。您不需要对该字节字符串进行编码,它已经编码。
然后发生的是 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
.