[JAVA] GBK转UTF-8汉字乱码 发现与解决

就在昨晚想写一个爬 饿了么查找最适合满减价格的外卖,我的步骤是先把网页保存下来先实验正则匹配的程序,
文件打开的方式是
BufferedReader br = new BufferedReader(new FileReader(path));



结果在适配正则的时候出来的字码是乱码怎么办?

查了查要转UTF-8于是就有了
System.out.println(new String(m.group(1).getBytes("GBK"),"UTF-8");
这段代码将是将GBK编码的字段转为UTF-8 继而打印,问题也就出现在这里

只要是双数的中文字符就会在最后一个汉字那里显示??,这可急死我了在百度上摸爬滚打查找了半天,都没找到靠谱的答案,只是说GBK转UTF-8会有计算错误,也实验这个 方法不管用,查java.io的packge还真的让我找到了一点头绪,我猜测是不是我打开方式不对呢?
因为在FileReader的构造函数里面并没有设置CharsetName的参数,可能在读取的时候就保留了错误所以导致无法补足位数,最后转换的失败.假如在读取的时候就直接转换为”UTF-8"的编码来读取应该会解决问题, 抱着这种想法我开始了查文档。

InputStreamReader就是个类解决了我的问题,在这个类的构造函数里拥有CharsetName参数,那我通过
FileInputStream fr = new FileInputStream(path);
InputStreamReader isr = new InputStreamReader(fr,"UTF-8");
BufferedReader br = new BufferedReader(isr);
String rline ="";
<span style="white-space:pre">			</span>String  line ="";
<span style="white-space:pre">			</span> while((rline=br1.readLine())!=null) {
<span style="white-space:pre">				</span> line+=rline;
<span style="white-space:pre">			</span> }
这个流套接。神奇的事情发生了
System.out.println(line);
我直接输出 成功了经过试验不管是无ROM 还是有ROM的文件都可以使用这个方法来实现正确输出。


PS:这是我第一次在CSDN分享,所以希望来到我blog的朋友多在评论里提一些建议意见。







评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值