linux libiconv从ISO8859或IBM850转码为UTF8错误

时间:2013-01-31 06:37:57

标签: linux iso-8859-1 iconv libiconv

我不知道原始代码是什么,所以我假设原始代码是IBM850或ISO8859-1。我的流程在下面

  1. IBM850 - > UTF8
    如果这样可以,我认为原始代码是IBM850,如果是NOK,请执行下一步:

  2. ISO8859-1 - > UTF8
    如果没关系,我认为原始代码是UTF8。

  3. 但是有一个问题, 如果原始代码是ISO8859-1,它将被IBM850识别。 如果原始代码是IBM850,它将被ISO8859-1识别。

    似乎IBM850和ISO8859-1之间存在共同点。

    谁能帮助我,谢谢。

1 个答案:

答案 0 :(得分:0)

是的,通过测试转换是否失败或成功,只能进行最微不足道的自动检测。对于几乎任何输入都有效的输入编码,它不起作用。

您应该了解更多关于您的可能输出的信息,以测试从IBM850ISO8859-1翻译后是否更有意义。这就是encalibenca所做的事情。你可以从一些简单的期望开始检查:

  1. 您的来源是否恰好位于两种编码的ASCII子集中?然后你对任何转换感到满意(但你根本无法知道原始编码)。
  2. 您的代码是否使用方框图字符?如果没有,则很容易拒绝IBM850的一些候选人。
  3. 您的代码是否使用ISO8859-1中的 control 字符?如果没有,如果使用代码点ISO8859-1 - 0x80,则很容易拒绝0x9F的某些候选人。
  4. 代码中非ASCII的片段是否总是用自然语言表示文本?然后,您可以对字符及其对使用频率表,根据这些条件选择使结果更接近到您的自然语言的源编码。 (如果两种变体几乎同样可以接受,那么最好给出错误信息并将最终决定留给人类。)