Java读取文件时遇到的乱码问题

最近要做一个Java爬虫,需要从txt文件中读取数据,然后遇到了一些问题。

我的txt文件:

Java读txt文件的语句:

BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\word.txt")));
String line = "";
while((line = reader.readLine())!= null) {
	System.out.println(line);
}

读取到的结果存在乱码现象:

寻思着可能是文件的编码格式在作祟。所以我去查看了一下txt的编码格式,发现是utf8,感觉这应该没问题呀。于是我又去查看Java API。

找到InputStreamReader类,查看它的构造方法,它一共有4个构造方法,这里我只选取了与本问题相关的两个构造方法,如下:

 
Constructor and Description
InputStreamReader(InputStream in)

创建一个使用默认字符集的InputStreamReader。

InputStreamReader(InputStream in, Charset cs)

创建一个使用给定字符集的InputStreamReader

看来原因是我们使用的是第一个构造方法,它创建了一个使用默认字符集的InputStreamReader,于是在读取文件时进行了编码转换,然后就导致了一些问题的出现。

那么我们再试一试使用第二个构造方法,我们指定字符集为utf8。

修改后的Java读txt文件的语句:

BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\word.txt"),"UTF-8"));
String line = "";
while((line = reader.readLine())!= null) {
	System.out.println(line);
}

结果如下:

这个 “?” 是什么鬼。。。

其实现在完全可以忽略 “?” 的问题,只需要在txt文件中第一行添加一个空行,然后在读取的时候,丢弃第一行,从第二行开始读取即可。

1. 在txt中第一行添加一个空行。

2. 在读取时,丢弃第一行,从第二行开始读取:在while循环读取前添加一行:line = reader.readLine();

BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\word.txt"),"UTF-8"));
String line = "";
line = reader.readLine();
while((line = reader.readLine())!= null) {
	System.out.println(line);
}

后面,我百度了那个问号出现的原因,有一位高人说明了原因:

附:UTF8最好不要带BOM,附许多经典评论(一篇文章);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值