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

在python 3中将utf-8编码字符串转换为纯文本,python,python-3.x,unicode,utf-8,Python,Python 3.x,Unicode,Utf 8,所以我一直都在关注unicode和utf-8,因为我有一个脚本可以从网上抓取图像和它们的标题。作品很棒,除非标题中有特殊人物(如Jökulsárlón.) 它以unicode的形式出现:- J\\xc3\\xb6kuls\\xc3\\xa1rl\\xc3\\xb3n 所以我想找到一种将字符串转换为纯文本的方法——无论是将它们转换为最接近的“普通”字母(如纯o而不是ö)还是打印那些实际的符号(而不是\xc3等)。我尝试了十亿种不同的方法,但我读过的很多东西在python 3中都不起作用 提前感谢

所以我一直都在关注unicode和utf-8,因为我有一个脚本可以从网上抓取图像和它们的标题。作品很棒,除非标题中有特殊人物(如Jökulsárlón.)

它以unicode的形式出现:-

J\\xc3\\xb6kuls\\xc3\\xa1rl\\xc3\\xb3n
所以我想找到一种将字符串转换为纯文本的方法——无论是将它们转换为最接近的“普通”字母(如纯o而不是ö)还是打印那些实际的符号(而不是\xc3等)。我尝试了十亿种不同的方法,但我读过的很多东西在python 3中都不起作用


提前感谢

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

要将它们转换为Unicode,必须对它们进行解码<例如,如果是utf-8,则代码>s.decode('utf-8')

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

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


错误
接受更多选项。

确实是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字符串。

如果您的字符串是
,并且它按字面意思打印
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'
>>s='J\\xc3\\xb6kuls\\xc3\\xa1rl\\xc3\\xb3n'
>>>类型
>>>
'J\\xc3\\xb6kuls\\xc3\\xa1rl\\xc3\\xb3n'
>>>s.encode('latin1')。decode('unicode_转义')。encode('latin1')。decode('utf8'))
“Jökulsárlón”

它是如何变得如此复杂的还不得而知。如果这不是解决方案,那么请使用包含字符串的变量类型(
type(s)
)更新您的问题,并使用如上所示的精确值作为示例。

啊,是的,我的错,让他们感到困惑。当我这样做时,它只会返回:“AttributeError:'str'object没有属性'decode'”。我有一种感觉,那是因为我在python 3上,在python 2中使用过,我只是不知道等价物是什么?啊!它没有解码,因为它是str,它已经是Unicode,只需继续编码。就是这样,我有s=str(在这里获取字符串),然后是c=s.encode('utf-8')。然后打印(c)-它仍然使用\xc2\等进行打印:(尝试此操作:打印(s.encode('ascii',errors='ignore')。对于
错误有更多选项。
。运气不好。在整个过程中仍然使用相同的未解码/x15等):)无论如何,谢谢你的帮助,看来不会合作的workaround@user3662991:它适用于字节对象,而不是字符串对象。如果您有字符串对象,则可能会出现问题。或者,需要设置编码选项以确保获得所需的Unicode字符串。