将utf-8编码的字符串转换为python 3中的纯文本

时间:2014-11-11 12:46:22

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

所以我已经全部陷入了unicode和utf-8,因为我有一个脚本可以从网上抓取图像及其标题。效果很好,除非他们的头衔有特殊字符(例如Jökulsárlón。)

它以unicode形式出现: -

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

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

提前致谢

3 个答案:

答案 0 :(得分:1)

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接受更多选项。

答案 1 :(得分: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字符串。

答案 2 :(得分:1)

如果您的字符串为<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))更新您的问题,并为我的示例显示上面显示的确切值。