1

我们有一个 CMS,其中包含数千个文本/html 文件。事实证明,用户一直在使用各种字符编码(utf-8、utf-8 w BOM、windows 1252、iso-8859-1)上传文本/html 文件。

当这些文件被读入并写入响应时,我们的 CMS 框架会在响应的 content-type 属性上强制使用 charset=UTF-8。

因此,任何非 UTF-8 内容都会显示给用户,并带有损坏的字符(?、黑色菱形等,当没有从“本机”字符编码到 UTF-8 的正确字符转换时)。此外,这些文档没有附加元数据指示字符集 - 据我所知,判断它们是什么字符集的唯一方法是在文本呈现应用程序(Firefox、Notepadd++ 等)中查看它们并“查看" 在内容上看它是否“看起来”正确。

有谁知道如何自动/智能地将未知编码的文件转换为 UTF-8?我读过这可以通过统计建模来完成,但这就是我头顶上的事情。

关于如何最好地解决问题的想法?

谢谢

4

3 回答 3

3

您可以使用 ICU4J 的CharsetDetector

于 2010-03-16T17:46:24.230 回答
1

尝试将其解码为 UTF-8。如果失败,则查找\x92,如果找到则解码为 CP1252。否则,解码为 Latin-1。

于 2010-03-16T17:35:28.400 回答
0

一般来说,没有办法告诉。字节序列 63 61 66 C3 A9 与 windows-1252 中的“café”、IBM437 中的“caf├⌐”或 UTF-8 中的“café”同样有效。不过,最后一个在统计上更有可能。

如果您不想处理统计方法,则一种在大多数情况下都有效的方法是假设任何看起来像 UTF-8 的东西都在,而其他任何东西都在 windows-1252 中。

或者,如果可以使用 UTF-16,请在文件开头查找 FE FF 或 FF FE。

于 2010-03-17T14:01:02.863 回答