不支持 Python 解码 Unicode
Posted
技术标签:
【中文标题】不支持 Python 解码 Unicode【英文标题】:Python decoding Unicode is not supported 【发布时间】:2011-11-29 21:17:34 【问题描述】:我在 Python 中的编码有问题。我尝试了不同的方法,但似乎找不到将输出编码为 UTF-8 的最佳方法。
这就是我想要做的:
result = unicode(google.searchGoogle(param), "utf-8").encode("utf-8")
searchGoogle
返回param
的第一个 Google 结果。
这是我得到的错误:
exceptions.TypeError: decoding Unicode is not supported
有谁知道如何让 Python 以 UTF-8 对我的输出进行编码以避免此错误?
【问题讨论】:
【参考方案1】:看起来google.searchGoogle(param)
已经返回unicode
:
>>> unicode(u'foo', 'utf-8')
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
unicode(u'foo', 'utf-8')
TypeError: decoding Unicode is not supported
所以你想要的是:
result = google.searchGoogle(param).encode("utf-8")
附带说明,您的代码希望它返回一个utf-8
编码字符串,那么使用相同编码对其进行解码(使用unicode()
)和编码回(使用.encode()
)有什么意义?
【讨论】:
老实说,unicode()
只是在胡闹,试图了解正在发生的事情。非常感谢:-)
现在我有时会收到ascii' codec can't decode byte 0xc3 in position
。你知道这是为什么吗?
在我建议的那一行?那么这意味着 searchGoogle() 返回了一个 0xC3 字节的字符串。调用 .encode()
会导致 Python 首先尝试转换为 unicode(使用 ascii 编码)。我不知道为什么 searchGoogle() 有时会返回 unicode,有时会返回一个字符串。也许这取决于您在param
中提供的内容?尝试坚持一种类型。
我希望有一种安全、简单的方法可以转换为 unicode。
@EricWalker 您可以编写一个笨拙的辅助函数,例如 def uors2u(object, encoding=..., errors=...)
,如果它已经是 Unicode,它将返回不变的 object
参数,或者如果 str 转换它。但是,此代码有异味。从外部(如文件系统)接收到所有输入后,您应该立即将其转换为 Unicode,并在需要时将其转换回来,然后再将其发送回。应该只有一个地方可以将 str 转换为 unicode,因此不需要像我描述的那样的辅助函数。以上是关于不支持 Python 解码 Unicode的主要内容,如果未能解决你的问题,请参考以下文章
Python TypeError 不支持 % 的操作数类型:'file' 和 'unicode'
系统使用(Python2不支持的) Unicode UTF-8 字符导致 ArcGIS 运行崩毁
在python中使用PyJWT解码jwt令牌给出错误算法不支持
Python2/3的中英文字符编码与解码输出: UnicodeDecodeError: 'ascii' codec can't decode/encode