我正在使用我用Python编写的客户机从一个web服务中检索一个名称列表。检索列表后,我将每个名称编码为unicode,然后将每个名称打印到stdout。当我提到“Ólafur JóhannÓlafsson”这个名字时,我得到了以下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
既然我不知道编码是什么,我如何将所有这些字符串转换成unicode?或者你能建议一个更好的方法来处理这个问题吗?在
来自^{} 的
UnicodeDammit
模块可以自动检测编码。在首先,当从文件、管道、套接字、终端等读取数据时,将数据解码为Unicode(编码的缺失);在发送/持久化数据时,将Unicode编码为适当的字节编码。我怀疑这是你问题的根源。在
web服务应该在接收到的头或数据中声明编码。
print
通常自动将Unicode编码为终端的编码(通过sys.stdout.encoding
发现),或者在没有编码的情况下,ascii
。如果目标编码不支持数据中的字符,您将得到一个UnicodeEncodeError
。在因为这不是您收到的错误,您应该张贴一些代码,以便我们可以看到您正在做什么。最有可能的是,编码字节串,而不是解码。下面是一个例子:
我在这里所做的是对字节串调用
encode
。由于encode
需要一个Unicode字符串,Python在编码到cp437
之前,首先使用默认的ascii
编码将字节字符串解码为Unicode。在通过解码而不是编码数据来解决这个问题,
^{pr2}$print
将自动编码到stdout。只要您的终端支持数据中的字符,它就会正确显示:此页可以帮助您http://wiki.python.org/moin/PrintFails
问题是,我想,你需要把这些名字打印到控制台。你真的需要它吗?或者只是一个测试环境?如果您只使用控制台进行测试,您可以切换到其他工具,如单元测试来检查您到底得到了什么值。在
相关问题 更多 >
编程相关推荐