如何在java中将文本内容规范化为UTF 8

时间:2010-03-16 17:33:14

标签: java utf-8 character-encoding iso-8859-1 windows-1252

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

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

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

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

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

由于

3 个答案:

答案 0 :(得分:3)

您可以使用ICU4J的CharsetDetector

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

如果您不想处理统计方法,那么大部分时间都可以使用的方法是假设任何看起来像UTF-8的东西,以及其他任何东西都在windows-1252中。

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