首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>java教程>资讯:Java如何获得文件编码格式的方法

Java如何获得文件编码格式的方法

www.jz123.cn  2010-04-02   来源:   中国建站    责任编辑(袁袁)    我要投递新闻

  在程序中,文本文件经常用来存储标准的ASCII码文本,比如英文、加减乘除等号这些运算符号。文本文件也可能用于存储一些其他非ASCII字符,如基于GBK的简体中文,基于BIG5的繁体中文等等。在存储这些字符时需要正确指定文件的编码格式;而在读取这些文本文件时,有时候就需要自动判定文件的编码格式。

  按照给定的字符集存储文本文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。

  对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:

  测试文件编码是否为UTF-8

  File file = new File(path);

  InputStream ios = new java.io.FileInputStream(file);

  byte[] b = new byte[3];

  ios.read(b);

  ios.close();

  if (b[0] == -17 && b[1] == -69 && b[2] == -65)

  System.out.println(file.getName() + “:编码为UTF-8″);

  else

  System.out.println(file.getName() + “:可能是GBK,也可能是其他编码。”);

  上述代码只是简单判定了是否是UTF-8格式编码的文本文件,如果项目对要判定的文本文件编码不可控(比如用户上传的一些HTML、XML等文本),可以采用一个现成的开源项目:cpdetector,它所在的网址是:http://www.oschina.net/p/cpdetector。它的类库很小,只有500K左右,利用该类库判定文本文件的代码如下:

  FileEncodeDetector

  package cn.edu.cqu.tiger;

  import info.monitorenter.cpdetector.io.ASCIIDetector;

  import info.monitorenter.cpdetector.io.CodepageDetectorProxy;

  import info.monitorenter.cpdetector.io.JChardetFacade;

  import info.monitorenter.cpdetector.io.ParsingDetector;

  import info.monitorenter.cpdetector.io.UnicodeDetector;

  import java.io.BufferedReader;

  import java.io.File;

  import java.io.FileInputStream;

  import java.io.FileNotFoundException;

  import java.io.IOException;

  import java.io.InputStream;

  import java.io.InputStreamReader;

  public class FileEncodeDetector {

  public static String getFileEncode(String path) {

  /*------------------------------------------------------------------------

  detector是探测器,它把探测任务交给具体的探测实现类的实例完成。

  cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法

  加进来,如ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector。

  detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的

  字符集编码。

  使用需要用到三个第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar

  cpDetector是基于统计学原理的,不保证完全正确。

  --------------------------------------------------------------------------*/

  CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();

  /*-------------------------------------------------------------------------

  ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于

  指示是否显示探测过程的详细信息,为false不显示。

  ---------------------------------------------------------------------------*/

  detector.add(new ParsingDetector(false));


上一篇:Java Web 服务: CXF 简介 下一篇:使用JAVA数字证书做数字签名认证

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图