【问题标题】:Converting utf-8 encoded string to just plain text in python 3在python 3中将utf-8编码的字符串转换为纯文本
【发布时间】:2014-11-11 12:46:22
【问题描述】:

所以我一直在关注 unicode 和 utf-8,因为我有一个脚本可以从网络上抓取图像及其标题。效果很好,除非他们的标题有特殊字符(例如 Jökulsárlón。)

它以 unicode 的形式出现:-

J\\xc3\\xb6kuls\\xc3\\xa1rl\\xc3\\xb3n

所以我想要一种方法将该字符串转换为纯文本 - 是否将它们转换为最接近的“普通”字母(如纯 o 而不是 ö)或打印那些实际符号(而不是 \xc3 等)我已经尝试了十亿种不同的方式,但我一直在阅读的很多东西在 python 3 中对我没有用。

提前致谢

【问题讨论】:

    标签: python python-3.x unicode utf-8


    【解决方案1】:

    确实是 UTF-8,但它们是字节:

    >>> b = b'J\xc3\xb6kuls\xc3\xa1rl\xc3\xb3n'
    >>> b
    b'J\xc3\xb6kuls\xc3\xa1rl\xc3\xb3n'
    >>> b.decode('utf-8')
    'Jökulsárlón'
    

    因为这是 Python 3.x,所以这是一个 Unicode 字符串。

    【讨论】:

    • @user3662991:它适用于字节对象,而不是字符串对象。如果您有一个字符串对象,则可能会出现问题。或者,需要设置一个编码选项以确保您获得所需的 Unicode 字符串。
    【解决方案2】:

    J\xc3\xb6kuls\xc3\xa1rl\xc3\xb3n 不是 unicode。不过它可能是 UTF-8。

    要将它们转换为 Unicode,您必须对其进行解码。例如,s.decode('utf-8') 如果是 UTF-8。

    在打印或写入之前,您必须再次对其进行编码。如果您编码为 ASCII,encode method 接受一个选项,告诉它如何处理无法在给定编码中表示的代码点。

    例如:print(s.encode('ascii', errors='ignore')

    errors 接受更多选项。

    【讨论】:

    • 啊,是的,我的错,让他们感到困惑。当我这样做时,它只返回:“AttributeError:'str'对象没有属性'decode'”。我有一种感觉,因为我在 python 3 上,而在 python 2 中使用过,我只是不知道等价物是什么?
    • 啊!它没有解码,因为它是str,它已经是Unicode,继续编码。
    • 就是这样,所以我有 s = str(在这里获取字符串),然后是 c = s.encode('utf-8')。然后打印 (c)- 它仍然使用 \xc2\ 等打印它。:(
    • 试试这个:print(s.encode('ascii', errors='ignore')。errors 有更多选项。
    • 不走运。整个过程中仍然是相同的未解码 /x15 等:(。无论如何感谢您的帮助,看起来它不会合作。我必须找到解决方法
    【解决方案3】:

    如果您的字符串是 <class 'str'> 并且它的字面意思是 J\\xc3\\xb6kuls\\xc3\\xa1rl\\xc3\\xb3n,那么下面的最后一行将对其进行解码:

    >>> s='J\\xc3\\xb6kuls\\xc3\\xa1rl\\xc3\\xb3n'
    >>> type(s)
    <class 'str'>
    >>> s
    'J\\xc3\\xb6kuls\\xc3\\xa1rl\\xc3\\xb3n'
    >>> s.encode('latin1').decode('unicode_escape').encode('latin1').decode('utf8')
    'Jökulsárlón'
    

    它是如何变得如此复杂尚不清楚。如果这不是解决方案,请使用包含字符串的变量类型(例如type(s))和上面我的示例所示的确切值来更新您的问题。

    【讨论】:

      猜你喜欢
      • 2016-05-16
      • 2013-07-01
      • 2017-06-10
      • 2011-12-08
      • 2011-05-20
      • 2014-06-22
      • 1970-01-01
      • 2019-07-20
      相关资源
      最近更新 更多