本篇内容主要讲解“java读取文件里面部分汉字内容乱码怎么办”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java读取文件里面部分汉字内容乱码怎么办”吧!
读取一个txt文件,到代码中打印出来,发票有部分汉字的内容是乱码的。
我开始的方式是这样的, 如下,这是完全错误的,汉字是两个字节的,如果每次读固定个字节,可能会把汉字截断。
就会出现部分乱码的情况。
package susq.path; import java.io.File; import java.io.FileInputStream; import java.io.IOException; /** * @author susq * @since 2018-05-18-19:28 */ public class WrongMethodReadTxt { public static void main(String[] args) throws IOException { ClassLoader classLoader = WrongMethodReadTxt.class.getClassLoader(); String filePath = classLoader.getResource("").getPath() + "/expect1.txt"; System.out.println(filePath); File file = new File(filePath); try (FileInputStream in = new FileInputStream(file)) { byte[] bytes = new byte[1024]; StringBuffer sb = new StringBuffer(); int len; while ((len = in.read(bytes)) != -1) { sb.append(new String(bytes, 0, len)); } System.out.println(sb.toString()); } } }
如果存在汉字,就要按字符的方式读取:
package susq.path; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; /** * @author susq * @since 2018-05-18-17:39 */ public class SysPath { public static void main(String[] args) throws IOException { ClassLoader classLoader = SysPath.class.getClassLoader(); String filePath = classLoader.getResource("").getPath() + "/expect1.txt"; System.out.println(filePath); File file = new File(filePath); try (BufferedReader br = new BufferedReader(new FileReader(file))) { StringBuffer sb = new StringBuffer(); while (br.ready()) { sb.append(br.readLine()); } System.out.println(sb); } } }
情况:用IO流读取数据时,若是不设置编码格式,出来的数据未必是我们所要的
代码:(字符串设置对应的编码即可,但这种方式,会导致个别中文乱码,貌似是byte[]导致的)
//这里我通过socket方式,获取流,并读取数据 //代理需要外置配置(代理配置需要判断,若有配置,则添加,若无配置,则不添加) Socket socket = new Socket("192.168.99.100", 80); String url = "GET " + href + " HTTP/1.1\r\n\r\n"; socket.getOutputStream().write(new String(url).getBytes()); InputStream is = socket.getInputStream(); byte[] bs = new byte[1024]; int i; StringBuilder str = new StringBuilder(); while ((i = is.read(bs)) > 0) { //一定要加编码,不然,在输出到文件时,部分数据会乱 str.append(new String(bs, 0, i,"UTF-8")); //由于socket读取不会断开,所以只能自断开连接读取 if(new String(bs, 0, i,"UTF-8").contains("</html>")){ break; } }
代码:
//代理需要外置配置(代理配置需要判断,若有配置,则添加,若无配置,则不添加) Socket socket = new Socket("192.168.99.100", 80); //Socket socket = new Socket(); String url = "GET " + href + " HTTP/1.1\r\n\r\n"; socket.getOutputStream().write(new String(url).getBytes()); InputStream is = socket.getInputStream(); //解决个别中文乱码 StringBuilder str = new StringBuilder(""); InputStreamReader isr = new InputStreamReader(is,"UTF-8"); BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) { str.append(line + "\n"); if(line.contains("</html>")){ break; } }
到此,相信大家对“java读取文件里面部分汉字内容乱码怎么办”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。