有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

当这些文件被读入并写入响应时,我们的CMS框架将在响应的内容类型属性上强制使用charset=UTF-8

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

有人知道如何自动/智能地将未知编码的文件转换为UTF-8吗?我读过,这可以通过统计建模来完成,但这是我无法理解的

如何最好地解决这个问题

谢谢


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    一般来说,没有办法判断。字节序列63 61 66 C3 A9在windows-1252“caf”中与“caf”一样有效├⌐在IBM437中,或者UTF-8中的“咖啡馆”。不过,从统计上看,最后一种可能性更大

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

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

  3. # 3 楼答案

    您可以使用ICU4J的^{}