识别并读取不同编码的文本文件

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

 

/** 
 * 判断文件的编码格式 
 * @param fileName :file 
 * @return 文件编码格式 
 * @throws Exception 
 */  
public static String codeString(String fileName) throws Exception{  
    BufferedInputStream bin = new BufferedInputStream(  
    new FileInputStream(fileName));  
    int p = (bin.read() << 8) + bin.read();  
    String code = null;  
      
    switch (p) {  
        case 0xefbb:  
            code = "UTF-8";  
            break;  
        case 0xfffe:  
            code = "Unicode";  
            break;  
        case 0xfeff:  
            code = "UTF-16BE";  
            break;  
        default:  
            code = "GBK";  
    }  
      
    return code;  
}  
然后,以字符流的方式读取文本

FileInputStream fInputStream = new FileInputStream(file);  
//code为上面方法里返回的编码方式  
InputStreamReader inputStreamReader = new InputStreamReader(fInputStream, code);  
BufferedReader in = new BufferedReader(inputStreamReader);  
  
String strTmp = "";  
//按行读取  
while (( strTmp = in.readLine()) != null) {  
    sBuffer.append(strTmp + "/n");  
}  
return sBuffer.toString(); 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值