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