1+ package 编码工具 ;
2+ import info .monitorenter .cpdetector .io .ASCIIDetector ;
3+ import info .monitorenter .cpdetector .io .CodepageDetectorProxy ;
4+ import info .monitorenter .cpdetector .io .JChardetFacade ;
5+ import info .monitorenter .cpdetector .io .ParsingDetector ;
6+ import info .monitorenter .cpdetector .io .UnicodeDetector ;
7+
8+ import java .io .File ;
9+ import java .nio .charset .Charset ;
10+
11+ /**
12+ *
13+ */
14+
15+ /**
16+ * @author weict
17+ *
18+ */
19+ public class JudgeFileCode {
20+ /**
21+ * @param args
22+ */
23+ public static Charset getFileCode (File f ) {
24+ /*------------------------------------------------------------------------
25+
26+
27+ detector是探测器,它把探测任务交给具体的探测实现类的实例完成。
28+
29+ cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法
30+
31+ 加进来,如ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector。
32+
33+ detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的
34+
35+ 字符集编码。
36+
37+ --------------------------------------------------------------------------*/
38+
39+ CodepageDetectorProxy detector = CodepageDetectorProxy .getInstance ();
40+
41+ /*-------------------------------------------------------------------------
42+
43+ ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于
44+
45+ 指示是否显示探测过程的详细信息,为false不显示。
46+
47+ ---------------------------------------------------------------------------*/
48+
49+ detector .add (new ParsingDetector (false ));//如果不希望判断xml的encoding,而是要判断该xml文件的编码,则可以注释掉
50+
51+ /*--------------------------------------------------------------------------
52+
53+ JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码
54+
55+ 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以
56+
57+ 再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
58+
59+ ---------------------------------------------------------------------------*/
60+
61+ detector .add (JChardetFacade .getInstance ());
62+
63+ // ASCIIDetector用于ASCII编码测定
64+
65+ detector .add (ASCIIDetector .getInstance ());
66+
67+ // UnicodeDetector用于Unicode家族编码的测定
68+
69+ detector .add (UnicodeDetector .getInstance ());
70+
71+ Charset charset = null ;
72+
73+ try {
74+
75+ charset = detector .detectCodepage (f .toURL ());
76+
77+ } catch (Exception ex ) {
78+ ex .printStackTrace ();
79+ }
80+
81+ if (charset != null ) {
82+
83+ System .out .println (f .getName () + "编码是:" + charset .name ());
84+
85+ } else {
86+
87+ System .out .println (f .getName () + "未知" );
88+ }
89+ return charset ;
90+
91+ }
92+
93+ }
0 commit comments