Unicode 从错误保存为UTF-8的数据重建Windows-1252字符

Unicode 从错误保存为UTF-8的数据重建Windows-1252字符,unicode,utf-8,character-encoding,windows-1252,Unicode,Utf 8,Character Encoding,Windows 1252,我正在处理使用Java HtmlUnit采样的数据。该网页使用Windows-1252编码,但检索响应时,将该页面编码为UTF-8(即调用HtmlUnit WebResponse对象上的getContentAsString时,指定了UTF-8编码,而不是延迟到服务器响应中指定的编码)。是否有任何方法可以逆转此过程,从错误标记的UTF-8字符数据重建原始Windows-1252数据 关于这个主题的大多数其他问题都涉及到识别文件的类型,或者从一种流类型转换为另一种流类型,以便首先正确编码字符。这里的

我正在处理使用Java HtmlUnit采样的数据。该网页使用Windows-1252编码,但检索响应时,将该页面编码为UTF-8(即调用HtmlUnit WebResponse对象上的getContentAsString时,指定了UTF-8编码,而不是延迟到服务器响应中指定的编码)。是否有任何方法可以逆转此过程,从错误标记的UTF-8字符数据重建原始Windows-1252数据


关于这个主题的大多数其他问题都涉及到识别文件的类型,或者从一种流类型转换为另一种流类型,以便首先正确编码字符。这里的情况并非如此。我不相信像iconv这样的实用程序会起作用,因为它们希望流从一开始就正确地保存在源代码中。

可能不会。如果Windows-1252编码的文本被误认为是UTF-8,那么所有非ASCII码点都将被破坏,因为UTF-8处理这些码点的方式。只有当您非常幸运,并且所有非ASCII码点都是成对或三对的,并且纯粹是偶然地转换为真正的Unicode码点时,您才可以反转这个过程


但是你的运气太差了。

这取决于损坏的代码点是如何存储的。我没有使用HtmlUnit的经验,但我想先看看结果的十六进制转储,然后再得出结论,这是不可能的。这可能不是不可能的。如果负责解码(假定的)utf-8的实体很奇怪,它可能会保持错误的utf-8码点“按原样”二进制,但这将是一个非常糟糕的解码器。我的猜测是,结果充满了方框或问号……HtmlUnit使用Java的编码,并且没有做任何特殊的事情(与icu4j不同)。因此,字符集的损坏将取决于Java的rt库的恶意,我认为这些库非常可靠。如果任何人有进一步的建议,鉴于该信息,将不胜感激。