您的位置:首页 > 编程语言 > Java开发

Java检测文件编码

2017-06-30 18:13 204 查看

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.juniversalchardet</groupId>
<artifactId>juniversalchardet</artifactId>
<version>1.0.3</version>
</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 编码