Java检测文件编码

Java检测文件编码

在Demo中涉及到文件的读写操作,但是在程序中并不知道文件的编码格式,文件的编码格式有UTF8,GBK等,如果不指定固定的编码格式的话,会默认采用系统编码,如果原文件为GBK编码且包含中文,而采用UTF-8编码字节流向字符流读入则会中文乱码,

BufferedReader br = null;
        br = new BufferedReader(new InputStreamReader(new FileInputStream(
                "./users.csv"), "指定源文件的编码格式"));

所以需要通过代码判断文件的编码格式;
这里使用了第三方工具包juniversalchardet
地址上有相应的说明,

maven依赖

<dependency>
    <groupId>com.googlecode.juniversalchardetgroupId>
    <artifactId>juniversalchardetartifactId>
    <version>1.0.3version>
dependency>

public static String getCharset(InputStream is) {

    UniversalDetector detector = new UniversalDetector(null);
    try {
        byte[] bytes = new byte[1024];
        int nread;
        if ((nread = is.read(bytes)) > 0 && !detector.isDone()) {
            detector.handleData(bytes, 0, nread);
        }
    } catch (Exception localException) {
        log.info("detected code:", localException);
    }
    detector.dataEnd();
    String encode = detector.getDetectedCharset();
    /** default UTF-8 */
    if (StringUtils.isEmpty(encode)) {
        encode = "UTF-8";
    }
    detector.reset();
    return encode;
    }

public static void main(String[] args) {
    File file = new File("file path");
    InputStream is = new FileInputStream(file);
    getCharset(is); 
}

编码格式检测的准确度有待验证。


附录:
https://stackoverflow.com/questions/1677497/guessing-the-encoding-of-text-represented-as-byte-in-java

你可能感兴趣的:(JAVA)