【问题标题】:Python Encoding error with some unicode characers带有一些 unicode 字符的 Python 编码错误
【发布时间】:2015-02-11 17:30:15
【问题描述】:

我在编码一些 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)

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

【问题讨论】:

    标签: python unicode encoding


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 2013-10-29
      • 2011-08-11
      • 2015-02-03
      • 2014-10-18
      • 1970-01-01
      • 2012-09-26
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多