如何在Java中检测字符集编码?

7

有没有人知道在Java中检测字符集编码的简单方法?似乎有些程序可以检测给定数据使用的字符集,或者至少可以做出近似。

我想底层机制必须解码每个字符集中的数据,并选择具有最少未定义字符的字符集,然后选择更常见的字符集来打破平局。

有什么想法吗?


我们在谈论哪种输入?字节数组(二进制)还是字符数组(字符串)?你想要区分哪些?这只能针对仅带有字节顺序标记的Unicode字符集进行,但对于其他字符集则不可靠。 - BalusC
1
这可能有点棘手。在这个网站上,pfarland正在使用一些启发式算法:http://forums.sun.com/thread.jspa?threadID=279203#3 - mre
1
相关主题:https://dev59.com/InRB5IYBdhLWcg3w1Khe 和 https://dev59.com/0HI-5IYBdhLWcg3wYXL8 - BalusC
2个回答

1

看看jchardet,这是一个从Mozilla浏览器移植而来的库,专门用于“猜测”文档的字符集。

作为替代方案,cpdetector库是一个稍新一点的库,专门用于检测文档的代码页。


-3

为了确定数据是否以任何Unicode格式(UTF-8,UTF-16等)存在,您可以在字节流中读取数据并检查前4个字节(BOM大小),对于每种编码方式都是不同的。

例如:

对于UTF-8,前3个字节将是EF,BB,BF

对于非Unicode编码,我不确定...


4
只有在存在的情况下,UTF-8 BOM 才是有用的:http://zh.wikipedia.org/wiki/字节顺序标记 - trashgod
@sreejith.. 上面的BOM解决方案只能用于判断文件是否为UTF-8格式(如果不是,则不会以给定的BOM开头)。但是,如果存在BOM,则它可以是UTF-8格式,也可以不是。例如,对于其他一些文件,初始字节“EF,BB,BF”实际上是有效数据! - Suraj Chandran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接