我不知道原始代码是什么,所以我假设原始代码是IBM850或ISO8859-1。
IBM850-> UTF8
如果可以,我认为原始代码是IBM850,如果不是,请执行下一步:
ISO8859-1-> UTF8
如果可以,我认为原始代码是UTF8。
但有个问题,
如果原始代码是ISO8859-1,它将被IBM850识别。
如果原始代码是IBM850,它将被ISO8859-1识别。
看来IBM850和ISO8859-1之间有共同点。
谁能帮助我,谢谢。
最佳答案
是的,只能通过测试转换是成功还是失败来实现最简单的自动检测。对于(几乎)任何输入均有效的输入编码,它将不起作用。
您应该对可能的输出有所了解,以测试从IBM850
或从ISO8859-1
转换后它是否更有意义。这就是enca
和libenca
的作用。您可能可以从一些简单的期望开始进行检查:
您的来源是否恰好在两种编码的ASCII
子集中?然后,您对任何转换都感到满意(但是您根本无法知道原始编码)。
您的代码是否使用箱形图字符?如果不是,很容易拒绝某些IBM850
候选人。
您的代码是否使用来自ISO8859-1
的控制字符?如果不是这样,如果使用代码点ISO8859-1
-0x80
,则很容易拒绝某些0x9F
候选者。
您的非ASCII代码片段是否始终以自然语言表示文本?然后,您可以将频率表用于字符及其对,选择源编码,从而使结果在这些条件上更接近您的自然语言。 (如果两种变体几乎都可以接受,那么最好给出一个错误消息,并由最终决定权交给人类)。