Python3,如何正确编码这个字符串?

Python3, how to encode this string correctly?

免责声明,我已经做了很长时间的研究来单独解决这个问题,但我在这里发现的大多数问题都与 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

如果您有 Unicode 字符串 "<h1>Sacr\xc3\xa9 bleu!</h1>",就已经出了问题。要么你的输入被破坏了,要么你在处理它时做错了什么。例如,在这里,您已将 Python 2 示例复制到 Python 3 解释器中。

如果你的琴弦断了是因为你做错了什么,那么你真的应该修复你做错了什么。如果无论如何都需要将 "<h1>Sacr\xc3\xa9 bleu!</h1>" 转换为 b"<h1>Sacr\xc3\xa9 bleu!</h1>",请将其编码为 latin-1:

bytestring = broken_unicode.encode('latin1')