转载:利用第三方的Jar包内的类和方法来判别文件编码收藏

 

今天在论坛里看见了一个人发帖子问,如何查看文件的编码。有一个人回帖推荐了一片文章,我看了一下,觉得挺好的,我把原文的意思取舍了一下,整理成了下面的文章。原文请查看:http://www.javaeye.com/topic/108540,作者是hdwangyi 。

他在帖子中贴出了一段代码来判断一个文本是UTF-8编码的,思路是读取一个txt文件,截取字符流的前3个字符(即标示位),判断是否与UTF-8的格式的标示位一致。

  1. import java.io.*;
  2. public class TestText {
  3.     public static void main(String args[]){
  4.         File file = new File("C:/1.txt");
  5.         
  6.         try{
  7.             InputStream stream = new FileInputStream(file);
  8.             byte[] byteArray = new byte[3];
  9.             
  10.             stream.read(byteArray);
  11.             stream.close();
  12.             
  13.             if (byteArray[0] == -17 && byteArray[1] ==  -69 && byteArray[2] == -65)
  14.                 System.out.println("UTF-8");
  15.             else
  16.                 System.out.println("可能是其他的编码");
  17.             
  18.         }
  19.         catch(Exception e){
  20.             e.printStackTrace();
  21.         }
  22.     }
  23. }

但显然这种方式有很大的局限性,而且需要对文件编码有着一定的了解。于是作者用到了第三方的jar包cpdetector,下载地址http://cpdetector.sourceforge.net/。如何在Eclipse中导入jar包,请看http://blog.csdn.net/justinavril/archive/2008/08/07/2783182.aspx。这个jar包内的类和方法能够准确判断文件的编码格式。

  1. import cpdetector.io.*;
  2. import java.io.*;
  3. import java.nio.charset.*;
  4. public class PageCode {
  5.     public static void main(String args[]){
  6.         
  7.         CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
  8.         detector.add(JChardetFacade.getInstance());
  9.         
  10.         Charset charset = null;
  11.         
  12.         File f = new File("C:/1.txt");  
  13.         
  14.         try {   
  15.             charset = detector.detectCodepage(f.toURL());   
  16.         } 
  17.         catch (Exception e) {
  18.             e.printStackTrace();
  19.         }   
  20.         if(charset!=null){   
  21.             System.out.println(f.getName()+"编码是:"+charset.name());   
  22.         }else  
  23.             System.out.println(f.getName()+"未知");  
  24.     }
  25. }
  1. 1.txt编码是:GB2312

可以把main函数的相关内容改成一个方法重用,从而达到自由判断文件编码的目的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值