【问题标题】:linux libiconv transcode from ISO8859 or IBM850 to UTF8 errorlinux libiconv 从 ISO8859 或 IBM850 转码为 UTF8 错误
【发布时间】:2013-01-15 04:55:19
【问题描述】:
不知道原码是什么,所以假设原码是IBM850或者ISO8859-1。下面我的流程
IBM850 -> UTF8
如果可以,我认为原始代码是IBM850,如果不可以,请执行下一步:
ISO8859-1 -> UTF8
如果可以的话,我认为原码是UTF8。
但是有一个问题,
如果原始代码是 ISO8859-1,它将被 IBM850 识别。
如果原代码是IBM850,则会被ISO8859-1识别。
IBM850 和 ISO8859-1 之间似乎有共同点。
谁能帮帮我,谢谢。
【问题讨论】:
标签:
linux
iso-8859-1
iconv
libiconv
【解决方案1】:
是的,通过测试转换是失败还是成功,只有最简单的自动检测是可能的。它不适用于(几乎)任何输入都有效的输入编码。
您应该更多地了解您可能的输出,以测试从IBM850 或ISO8859-1 翻译后是否更有意义。这就是enca 和libenca 所做的。您可能可以从一些简单的期望开始检查:
- 您的源是否恰好在两种编码的
ASCII 子集中?那么您对任何转换都很满意(但您根本无法知道原始编码)。
- 您的代码是否使用方框图字符?如果没有,很容易拒绝
IBM850 的一些候选人。
- 您的代码是否使用来自
ISO8859-1 的控制 字符?否则,如果使用代码点 0x80-0x9F,则很容易拒绝 ISO8859-1 的一些候选人。
- 您的非 ASCII 代码片段是否总是以自然语言表示文本?然后,您可以对字符及其对使用频率表,根据这些标准选择使结果更接近的源编码。 (如果两种变体几乎同样可以接受,最好给出错误消息并将最终决定权留给人类)。