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

时间:2018-08-31 23:40:00

标签: python-3.x utf-8 python-3.5

免责声明,我已经进行了长期的研究来单独解决这个问题,但是我在这里发现的大多数问题都与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 :(得分:0)

如果您有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')