一些unicode字符的Python编码错误

标签 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)

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

最佳答案

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

关于一些unicode字符的Python编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28460679/

相关文章:

python - robotsframework:定义类中可用的关键字

python - Keras:在新实验中重复使用经过训练的权重

python - colorbar matplotlib python 上的 onclick 方法

python - Lo 类别的基数

python - 为什么字符串对象的 IronPython str() 会引发 UnicodeEncodeError?

string - 命令行中的希伯来语 - matlab

php - CURL导入字符编码问题

java - 如何从java中的编码中查找语言环境

python解码/编码 hell (使用jinja2)

python - 如何在不使用循环的情况下为 3D numpy 数组中的每个值做出 N 个随机选择