就在昨晚想写一个爬
饿了么查找最适合满减价格的外卖,我的步骤是先把网页保存下来先实验正则匹配的程序,
文件打开的方式是
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的朋友多在评论里提一些建议意见。