码迷,mamicode.com
首页 > 编程语言 > 详细

如何判断java.io.File所读取的文件编码

时间:2015-03-28 17:25:39      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

如何判断java.io.File所读取的文件编码

问题

java中涉及到文件读取,就经常要考虑文件编码问题。虽然程序中一般都指定UTF-8编码,但是用户总可能提交各种编码的文件(特别是windows下用户),如果对这些文件不做判断就直接按照UTF-8的方式读取的话,是肯定会乱码的。

解决方案

java原生并不支持文件编码的判断,一般都是read文件的前几个字节来判断,需要自己编写工具类,判断的编码类型也比较少。最近找到了个开源的项目juniversalchardet,能比较优雅的完成这个任务。
使用方法也很简单,下载它的jar包,按照官网的例子操作即可,当然这段代码自己封装成工具类最好了:

import org.mozilla.universalchardet.UniversalDetector;

public class TestDetector {
  public static void main(String[] args) throws java.io.IOException {
    byte[] buf = new byte[4096];
    String fileName = args[0];
    java.io.FileInputStream fis = new java.io.FileInputStream(fileName);

    // (1)
    UniversalDetector detector = new UniversalDetector(null);

    // (2)
    int nread;
    while ((nread = fis.read(buf)) > 0 && !detector.isDone()) {
      detector.handleData(buf, 0, nread);
    }
    // (3)
    detector.dataEnd();

    // (4)
    String encoding = detector.getDetectedCharset();
    if (encoding != null) {
      System.out.println("Detected encoding = " + encoding);
    } else {
      System.out.println("No encoding detected.");
    }

    // (5)
    detector.reset();
  }
}

我自己写成工具类测试的时候,发现有些文件还是不能判断出来(比如excel保存过的gbk编码的.csv文件),所以使用它判断文件编码的时候,最好处理下得不到编码的情况,比如给个默认编码啥的。

juniversalchardet的项目地址

  1. googlecode
  2. github

如何判断java.io.File所读取的文件编码

标签:

原文地址:http://my.oschina.net/u/1010578/blog/393060

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!