2010-02-12 32 views
7

有谁知道是否有一种简单的方法来检测Java中的字符集编码?在我看来,有些程序能够检测某个给定数据使用哪个字符集,或者至少能够进行aproximation。如何检测Java中的哪些字符集编码?

我想的基本机制将不得不在每个字符集的数据进行解码,并挑选哪一个具有最少未定义的字符,随后的字符集更常见的是打破平局。

任何想法?

+0

什么输入,我们谈论的?字节数组(二进制)或字符数组(字符串)?那么你想区分哪些?它可以只为Unicode字符集(使用字节顺序标记)完成,但不能为其他的可靠性。 – BalusC 2010-02-12 00:06:14

+1

这可能会很棘手。在这个网站pfarland使用一些启发:http://forums.sun.com/thread.jspa?threadID=279203#3 – mre 2010-02-12 00:10:52

+1

相关主题:http://stackoverflow.com/questions/499010/java-how-to - 确定最正确-字符集编码对的一串流和http://stackoverflow.com/questions/1888189/java-readers-and-encodings – BalusC 2010-02-12 00:28:47

回答

-3

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

为如:

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

比Unicode编码的其他编码我不知道......

+4

可选UTF-8 BOM是唯一有用的,如果它是存在:http://en.wikipedia.org/wiki/Byte_order_mark – trashgod 2010-02-12 03:03:16

+0

@sreejith ..上面的BOM溶液只能用来告诉一个文件不是UTF-8(在这种情况下它不会与给定的BOM启动)。但是如果BOM存在,它可以是UTF-8或不是。对于例如也许对于其他一些文件,最初的字节“EF,BB,BF”实际上是有效的数据。 – 2011-02-18 07:03:12

1

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

作为替代方案,所述cpdetector库,一个较新的位,专门检测文档的代码页。