【问题标题】:Python decoding Unicode is not supported不支持 Python 解码 Unicode
【发布时间】: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 对我的输出进行编码以避免此错误?

【问题讨论】:

    标签: python encoding utf-8 character-encoding


    【解决方案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,因此不需要像我描述的那样的辅助函数。
    猜你喜欢
    • 2013-07-16
    • 2013-06-10
    • 2013-03-31
    • 1970-01-01
    • 2020-02-03
    • 2012-09-29
    • 1970-01-01
    • 2013-05-14
    • 2011-04-15
    相关资源
    最近更新 更多