我已经在UTF-8中获得了一个所谓的文件,但是对于一些非英文字符有一些奇怪的编码。例如,在这个神秘编码中,韩语字符串
한국경북영덕군강구면
编码为:
0xED959C 0xEAB5AD 0xEAB2BD 0xEBB63F 0xEC983F 0xEB3F95 0xEAB5B0 0xEAB095 0xEAB5AC 0xEBA9B4
(粗体差异)而不是标准的UTF-8:
0xED959C 0xEAB5AD 0xEAB2BD 0xEBB681 0xEC9881 0xEB8D95 0xEAB5B0 0xEAB095 0xEAB5AC 0xEBA9B4"
我看到了与西里尔字母和中文字符相同的现象 - 有些字符的编码与UTF-8相同,但有些字符不同。乱码字符与非乱码字符具有相同的字节宽度,并且我已经验证它们不是扩展集的一部分。另外,我已经证实这是不 Java"修改过的UTF-8"。
关于这可能是什么的任何其他想法?
BTW:我无法访问最初编写该文件的代码或人员。
此外,如果与Mac 10.11.6有任何关系,我也会这样做。
答案 0 :(得分:3)
您的示例字符串由UTF-8组成,但某些字节值(即x81和x8D)替换为ASCII问号?
(x3F)。唯一合理的解释是你的示例字符串已经通过了一个试图根据其他编码(可能是单字节字符集)解释其内容的软件,并且取代了"无效" ?
的字符(类似于Unicode文本处理器如何用U + FFFD替换无效的Unicode字符)。
不幸的是,这个过程并不是真正可逆的,因为至少有两个不同的字节值(可能更多不会出现在你的例子中)被替换掉了,所以没有保证的方法可以识别每种情况下的原始字节值。取决于它的重要性 - 也就是说,取决于它花费多少时间 - 你可以识别被替换的完整字节集,然后写一些为每个字节尝试每个可能值的东西,将得到的字符序列与相关语言中某些文本语料库中的(例如)bigram频率进行比较,并选择最可能的字节。 (当然,它会犯一些错误。要估计产生的错误率,您可以在已知的文本上尝试相同的过程。)