不支持 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'

编码和解码

python 学习DAY06

系统使用(Python2不支持的) Unicode UTF-8 字符导致 ArcGIS 运行崩毁

在python中使用PyJWT解码jwt令牌给出错误算法不支持

Python2/3的中英文字符编码与解码输出: UnicodeDecodeError: 'ascii' codec can't decode/encode