Java如何获取文件编码格式
来源:程序员人生 发布时间:2017-03-24 08:58:03 阅读次数:8549次
学习Java的同学注意了!!!
学习进程中遇到甚么问题或想获得学习资源的话,欢迎加入Java学习交换群,群号码:183993990 我们1起学Java!
1:简单判断是UTF⑻或不是UTF⑻,由于1般除UTF⑻以外就是GBK,所以就设置默许为GBK。
依照给定的字符集存储文件时,在文件的最开头的3个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前3个字节,判定这些字节的值,就能够得知其编码的格式。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就能够了:GBK和UTF⑻。由于中文Windows默许的编码是GBK,所以1般只要判定UTF⑻编码格式。
对UTF⑻编码格式的文本文件,其前3个字节的值就是⑴7、⑹9、⑹5,所以,判定是不是是UTF⑻编码格式的代码片断以下:
-
File file = new File(path);
-
InputStream in= new java.io.FileInputStream(file);
-
byte[] b = new byte[3];
-
in.read(b);
-
in.close();
-
if (b[0] == -17 && b[1] == -69 && b[2] == -65)
-
System.out.println(file.getName() + ":编码为UTF⑻");
-
else
-
System.out.println(file.getName() + ":多是GBK,也多是其他编码");
2:若想实现更复杂的文件编码检测,可使用1个开源项目cpdetector,它所在的网址是:http://cpdetector.sourceforge.net/。它的类库很小,只有500K左右,cpDetector是基于统计学原理的,不保证完全正确,利用该类库判定文本文件的代码以下:
读外部文件(先利用cpdetector检测文件的编码格式,然后用检测到的编码方式去读文件):
-
-
-
-
-
-
-
-
-
public static String getFileEncode(String path) {
-
-
-
-
-
-
-
-
-
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
-
-
-
-
-
detector.add(new ParsingDetector(false));
-
-
-
-
-
-
detector.add(JChardetFacade.getInstance());
-
-
detector.add(ASCIIDetector.getInstance());
-
-
detector.add(UnicodeDetector.getInstance());
-
java.nio.charset.Charset charset = null;
-
File f = new File(path);
-
try {
-
charset = detector.detectCodepage(f.toURI().toURL());
-
} catch (Exception ex) {
-
ex.printStackTrace();
-
}
-
if (charset != null)
-
return charset.name();
-
else
-
return null;
-
}
-
String charsetName = getFileEncode(configFilePath);
-
System.out.println(charsetName);
-
inputStream = new FileInputStream(configFile);
-
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, charsetName));
读jar包内部资源文件(先利用cpdetector检测jar内部的资源文件的编码格式,然后以检测到的编码方式去读文件):
-
-
-
-
-
-
-
-
-
public static String getFileEncode(URL url) {
-
-
-
-
-
-
-
-
-
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
-
-
-
-
-
detector.add(new ParsingDetector(false));
-
-
-
-
-
-
detector.add(JChardetFacade.getInstance());
-
-
detector.add(ASCIIDetector.getInstance());
-
-
detector.add(UnicodeDetector.getInstance());
-
java.nio.charset.Charset charset = null;
-
try {
-
charset = detector.detectCodepage(url);
-
} catch
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠