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

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



结果在适配正则的时候出来的字码是乱码怎么办?
[JAVA] GBK转UTF-8汉字乱码 发现与解决
查了查要转UTF-8于是就有了
System.out.println(new String(m.group(1).getBytes("GBK"),"UTF-8");
这段代码将是将GBK编码的字段转为UTF-8 继而打印,问题也就出现在这里
[JAVA] GBK转UTF-8汉字乱码 发现与解决
只要是双数的中文字符就会在最后一个汉字那里显示??,这可急死我了在百度上摸爬滚打查找了半天,都没找到靠谱的答案,只是说GBK转UTF-8会有计算错误,也实验这个 方法不管用,查java.io的packge还真的让我找到了一点头绪,我猜测是不是我打开方式不对呢?
因为在FileReader的构造函数里面并没有设置CharsetName的参数,可能在读取的时候就保留了错误所以导致无法补足位数,最后转换的失败.假如在读取的时候就直接转换为”UTF-8"的编码来读取应该会解决问题, 抱着这种想法我开始了查文档。
[JAVA] GBK转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);
我直接输出 [JAVA] GBK转UTF-8汉字乱码 发现与解决成功了经过试验不管是无ROM 还是有ROM的文件都可以使用这个方法来实现正确输出。


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