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