我有一些包含html转义码的文本,我正在努力完全解码/编码以使用Python正确显示(最终在Django应用程序中)
""Coup d'État""
是一个麻烦的片段
我已经使用html.unescape()
成功地取消了大部分html代码的扫描,但是在本例中,我正在努力解码特殊字符"É"
。理想情况下,这将显示为“Coup d'eatat”,但尽管尝试了一些解码/编码组合,我还是得到了“Coup d'eatat”
将""Coup d'État""
转换为"Coup d'État"
的正确方法是什么
感谢您的帮助,如果在其他地方得到答复,请道歉。我试过搜索,但没有成功
您有一个Mojibake,双重编码的数据。您不仅拥有HTML实体,而且在应用HTML实体之前,您的数据被错误地从字节解码为文本
例如,两个
Ã
、‰
实体解码为Unicode字符Ã
和‰
。这两个字符(根据Unicode标准)也被称为U+00C3 LATIN CAPITAL LETTER A WITH TILDE
和U+2030 PER MILLE SIGN
。这是典型的UTF-8数据被错误解释为拉丁变体编码(如ISO 8859-1或Windows Latin codepage variant)的情况如果我们假设原始字符是
É
或U+00C9 LATIN CAPITAL LETTER E WITH ACUTE
,那么如果使用UTF-8,原始字符将被编码为C3
和89
字节这里显示的是不是巧合,UTF-8->;拉丁变体Mojibakes的典型结果就是这样的组合。89
映射告诉我们,最可能的错误编码是Windows CP 1252 encoding,它将十六进制值89
映射到U+2030 PER MILLE SIGN
您可以手动编码为字节,然后作为正确的编码进行解码,但诀窍是要知道错误使用了什么编码,有时这种错误会导致数据丢失,因为CP-1252代码页没有针对5个特定字节值的Unicode字符映射。这不是您的任务中的示例的直接问题离子,但可以用于其他文本。手动解码的工作方式如下:
一个更好的选择是使用特殊的^{} library (这个名字是的首字母缩略词,Fixed That for You),它使用关于如何识别此类错误和修复损坏的详细知识
ftfy
还处理HTML实体解码,全部在一个步骤中完成:该库包括sloppy variants of text codes often found in a Mojibake以帮助修复。它还编码有关如何识别给定错误编解码器选择产生的特定错误的信息,以便知道如何扭转损坏
相关问题 更多 >
编程相关推荐