JAVA读取⽂件字符集【File、MultipartFile、cpdetector】⼀、简介
cpdetector:是⼀款基于JAVA的⽂件编码⽅式检测⼯具
⼆、导⼊cpdetector的jar包
下载地址:
<dependency>
<groupId>net.sourceforge.cpdetector</groupId>
<artifactId>cpdetector</artifactId>spring怎么读取jar文件
<version>1.0.7</version>
</dependency>
<dependency>
<groupId&illa.intl</groupId>
<artifactId>chardet</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.4</version>
</dependency>
三、两种传参⽅式实现读取⽂件编码集
1、传⼊url解析⽂件编码
ample.demo;
itorenter.cpdetector.io.*;
itorenter.cpdetector.io.ParsingDetector;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
public class EncodeTest {
public static void main(String[] args) {
String charsetName = getFileEncode("E:\\test1.sql");
System.out.println(charsetName);
}
/**
* 利⽤第三⽅开源包cpdetector获取⽂件编码格式
* @param path:要判断⽂件编码格式的源⽂件的路径
*/
public static String getFileEncode(String path) {
/*
* detector是探测器,它把探测任务交给具体的探测实现类的实例完成。
* cpDetector内置了⼀些常⽤的探测实现类,这些探测实现类的实例可以通过add⽅法加进来,如ParsingDetector、
* JChardetFacade、ASCIIDetector、UnicodeDetector。
* detector按照“谁最先返回⾮空的探测结果,就以该结果为准”的原则返回探测到的
* 字符集编码。使⽤需要⽤到三个第三⽅JAR包:antlr.jar、chardet.jar和cpdetector.jar
* cpDetector是基于统计学原理的,不保证完全正确。
*/
CodepageDetectorProxy detector = Instance();
/*
* ParsingDetector可⽤于检查HTML、XML等⽂件或字符流的编码,构造⽅法中的参数⽤于
* 指⽰是否显⽰探测过程的详细信息,为false不显⽰。
*/
detector.add(new ParsingDetector(false));
/*
* JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成⼤多数⽂件的编码
* 测定。所以,⼀般有了这个探测器就可满⾜⼤多数项⽬的要求,如果你还不放⼼,可以
* 再多加⼏个探测器,⽐如下⾯的ASCIIDetector、UnicodeDetector等。
*/
detector.Instance());// ⽤到antlr.jar、chardet.jar
// ASCIIDetector⽤于ASCII编码测定
detector.Instance());
// UnicodeDetector⽤于Unicode家族编码的测定
detector.Instance());
java.nio.charset.Charset charset = null;
File f = new File(path);
try {
charset = detector.URI().toURL());
} catch (Exception ex) {
ex.printStackTrace();
}
if (charset != null)
return charset.name();
else
return null;
}
}
2、传⼊⽂件流解析⽂件编码集
ller;
itorenter.cpdetector.io.*;
itorenter.util.FileUtil;
illa.universalchardet.UniversalDetector;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
@RequestMapping("/test")
@RestController
public class DemoTestController {
private Set<ICodepageDetector> detectors = new LinkedHashSet();
@RequestMapping("test")
public String test(MultipartFile file) throws IOException {
return getFileEncode(file);
}
/**
* 利⽤第三⽅开源包cpdetector获取⽂件编码格式
*/
public String getFileEncode(MultipartFile file) {
/*
* detector是探测器,它把探测任务交给具体的探测实现类的实例完成。
* cpDetector内置了⼀些常⽤的探测实现类,这些探测实现类的实例可以通过add⽅法加进来,如ParsingDetector、        * JChardetFacade、ASCIIDetector、UnicodeDetector。
* detector按照“谁最先返回⾮空的探测结果,就以该结果为准”的原则返回探测到的
* 字符集编码。使⽤需要⽤到三个第三⽅JAR包:antlr.jar、chardet.jar和cpdetector.jar
* cpDetector是基于统计学原理的,不保证完全正确。
*/
CodepageDetectorProxy detector = Instance();
/*
* ParsingDetector可⽤于检查HTML、XML等⽂件或字符流的编码,构造⽅法中的参数⽤于
* 指⽰是否显⽰探测过程的详细信息,为false不显⽰。
*/
detector.add(new ParsingDetector(false));
/*
* JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成⼤多数⽂件的编码
* 测定。所以,⼀般有了这个探测器就可满⾜⼤多数项⽬的要求,如果你还不放⼼,可以
* 再多加⼏个探测器,⽐如下⾯的ASCIIDetector、UnicodeDetector等。
*/
detector.Instance());// ⽤到antlr.jar、chardet.jar
// ASCIIDetector⽤于ASCII编码测定
detector.Instance());
// UnicodeDetector⽤于Unicode家族编码的测定
detector.Instance());
java.nio.charset.Charset charset = null;
//        File f = new File(path);
try {
BufferedInputStream in = new InputStream());
//            charset = detector.URI().toURL());
charset = detector.detectCodepage(in,2147483647);
//            charset = codeTest(in,2147483647);
System.out.println(charset);
} catch (Exception ex) {
ex.printStackTrace();
}
if (charset != null)
return charset.name();
else
return null;
}
}
四、测试结果

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。