Java如何识别并读取不同编码的文本文件(转)

相信大部分人都知道,txt文件有四种编码格式,"GBK", "UTF-8", "Unicode", "UTF-16BE",每一种编码格式的区分在于写入文件头的信息不同.为了避免读取乱码的现象,我们应该在读取文本之前先读取文件头信息,以便做出正确的读取编码方式.下面给出方法.

 

[java] view plaincopy
 
  1. /** 
  2.  * 判断文件的编码格式 
  3.  * @param fileName :file 
  4.  * @return 文件编码格式 
  5.  * @throws Exception 
  6.  */  
  7. public static String codeString(String fileName) throws Exception{  
  8.     BufferedInputStream bin = new BufferedInputStream(  
  9.     new FileInputStream(fileName));  
  10.     int p = (bin.read() << 8) + bin.read();  
  11.     String code = null;  
  12.       
  13.     switch (p) {  
  14.         case 0xefbb:  
  15.             code = "UTF-8";  
  16.             break;  
  17.         case 0xfffe:  
  18.             code = "Unicode";  
  19.             break;  
  20.         case 0xfeff:  
  21.             code = "UTF-16BE";  
  22.             break;  
  23.         default:  
  24.             code = "GBK";  
  25.     }  
  26.       
  27.     return code;  
  28. }  

 

 

然后,以字符流的方式读取文本

 

[java] view plaincopy
 
  1. FileInputStream fInputStream = new FileInputStream(file);  
  2. //code为上面方法里返回的编码方式  
  3. InputStreamReader inputStreamReader = new InputStreamReader(fInputStream, code);  
  4. BufferedReader in = new BufferedReader(inputStreamReader);  
  5. String strTmp = "";  
  6. //按行读取  
  7. while (( strTmp = in.readLine()) != null) {  
  8.     sBuffer.append(strTmp + "/n");  
  9. }  
  10. return sBuffer.toString();  

 

posted @ 2013-11-13 15:02  晴心  阅读(933)  评论(0)    收藏  举报