Предполагается, что Python 2:
Это байтовая строка с экранированием Unicode.Экранирование Unicode было сгенерировано неправильно для некоторых данных в кодировке UTF-8:
>>> s = "vinili-disponibili/311-canzoniere-del-lazio-lassa-st\u00c3\u00a0-la-me-creatura.html"
>>> s.decode('unicode-escape')
u'vinili-disponibili/311-canzoniere-del-lazio-lassa-st\xc3\xa0-la-me-creatura.html'
Теперь это строка Unicode, но теперь она выглядит неправильно декодированной, поскольку кодовые точки напоминают байты UTF-8.Выходной кодек latin1
(также iso-8859-1
) отображает первые 256 кодовых точек непосредственно в байты 0-255, поэтому используйте этот трюк для преобразования обратно в строку байтов:
>>> s.decode('unicode-escape').encode('latin1')
'vinili-disponibili/311-canzoniere-del-lazio-lassa-st\xc3\xa0-la-me-creatura.html'
Теперьможет быть правильно декодирован как UTF-8:
>>> s.decode('unicode-escape').encode('latin1').decode('utf8')
u'vinili-disponibili/311-canzoniere-del-lazio-lassa-st\xe0-la-me-creatura.html'
Это строка Unicode, поэтому Python отображает значение repr()
, которое показывает кодовые точки выше U + 007F в качестве escape-кодов.print
чтобы увидеть фактическое значение, предполагая, что ваш терминал правильно сконфигурирован с кодировкой, которая поддерживает печатные символы:
>>> print(s.decode('unicode-escape').encode('latin1').decode('utf8'))
vinili-disponibili/311-canzoniere-del-lazio-lassa-stà-la-me-creatura.html
В идеале, вместо того, чтобы работать, исправьте проблему, из-за которой эта строка возникла неправильно.вокруг беспорядка.