java读取txt文件第一行_Java读取UTF-8编码的TXT文件,第一行多一个"?"

在Java中读取UTF-8编码的TXT文件时,有时会发现第一行多了一个中文的'?'。原因在于文件保存时选择了'UTF-8+BOM'格式,BOM字符导致了这一问题。解决办法是在读取文件前检查并移除第一行的BOM字符。
摘要由CSDN通过智能技术生成

在java中读取文件是再平常不过了,而读txt文件又是最简单最基本的。刚接触java时就写过读取txt文件的代码,无非就是那几句:

String filepath = "";

try{

File file = new File(filepath);

FileInputStream fis = new FileInputStream(file);

InpuitStreamReader isr = new InputStreamReader(fis,"UTF-8");

BufferedReader br = new BufferedReader(isr);

String line = null;

while((line=br.readLine())!=null){

//执行操作

}

}catch(Exception e){

e.printStackTrace();

}finally{

if(br != null){

br.close();

}

if(isr != null){

isr.close();

}

if(fis != null){

fis.close();

}

}

然而最近在写一个项目要将txt文件入库并在浏览器上显示导入的东西时,出奇地发现有时候会出现导入的数据第一行内容不对,无缘无故多了一个中文的"?",其他行内容都是ok的。如下图

d55443ce8f0b857858f4c73155d8d2b6.png

带着疑问我用EditPlus打开了导入的文件(之前都是用windows自带的记事本打开的),查看文件的十六进制码。原文件内容如下图:

5a2e23b6dd7678930f3a6c3826c81908.png

其十六进制码显示如下:

57f3040e75c956f63b564ea57cd30202.png

我们可以发现在文件的第一行多了"EF BB BF"三个数字,而后面的73,61....就是正常的内容,那么这三个数字到底是什么呢?我就把非ASCII码字符也显示出来,如下图:

a1b20c873053fe3fb7f8020d41c83bc7.png

原来库里的"?"就是显示那个非ASCII字符,既然是非ASCII码字符未作任何处理,在库里存储肯定是以乱码的"?"来表示了。为此我又打开了一份内容一致保存正常的文件,也查看其十六进制码,如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值