Python3, как правильно закодировать эту строку? - PullRequest
0 голосов
/ 01 сентября 2018

отказ от ответственности, я уже провел длительное исследование, чтобы решить это самостоятельно, но большинство вопросов, которые я нашел здесь, касается Python 2.7 или не решает мою проблему

Допустим, у меня есть следующее (этот пример взят из документа BeautifulSoup, я пытаюсь решить большую проблему):

>>> markup = "<h1>Sacr\xc3\xa9 bleu!</h1>"
>>> print(markup)
'Sacré bleu!'

Для меня разметка должна быть назначена в байтах, чтобы я мог сделать:

>>> markup = b"<h1>Sacr\xc3\xa9 bleu!</h1>"
>>> print(str(markup, 'utf-8'))
<h1>Sacré bleu!</h1>

Да! но как мне сделать этот переход между "<h1>Sacr\xc3\xa9 bleu!</h1>", который неверен в b"<h1>Sacr\xc3\xa9 bleu!</h1>"?

Потому что, если я сделаю:

>>> markup = b"<h1>Sacr\xc3\xa9 bleu!</h1>"
>>> bytes(markup, "utf-8")
b'<h1>Sacr\xc3\x83\xc2\xa9 bleu!</h1>'

Понимаете? Он вставил \x83\xc2 бесплатно.

>>> print(bytes(markup))
TypeError: string argument without an encoding

1 Ответ

0 голосов
/ 01 сентября 2018

Если у вас есть строка Unicode "<h1>Sacr\xc3\xa9 bleu!</h1>", что-то уже пошло не так. Либо ваш ввод неверен, либо вы сделали что-то не так при обработке. Например, здесь вы скопировали пример Python 2 в интерпретатор Python 3.

Если у вас есть сломанная строка, потому что вы сделали что-то не так, чтобы получить ее, тогда вам действительно следует исправить то, что вы сделали неправильно. Если вам все равно нужно конвертировать "<h1>Sacr\xc3\xa9 bleu!</h1>" в b"<h1>Sacr\xc3\xa9 bleu!</h1>", закодируйте его в латинице-1:

bytestring = broken_unicode.encode('latin1')
...