java读取文件里面部分汉字内容乱码的解决方案

作者:alwaysBrother 时间:2022-06-11 03:32:49 

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);
       }
   }
}

java的IO流读取数据时,解决中文乱码,还有个别中文乱码问题

情况:用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;
      }
 }

来源:https://blog.csdn.net/u013041642/article/details/80368787

标签:java,汉字,乱码
0
投稿

猜你喜欢

  • Java编写网上超市购物结算功能程序

    2021-10-29 13:55:52
  • Java向上转型和向下转型实例解析

    2022-08-12 01:59:28
  • 解决SpringBoot加载application.properties配置文件的坑

    2023-02-05 19:55:27
  • c# list部分操作实现代码

    2021-09-25 03:43:19
  • 在spring中手写全局异常拦 截器

    2023-11-09 01:25:42
  • 解析JavaSe的内部类

    2022-08-14 18:19:33
  • asp.net core 使用 tensorflowjs实现 face recognition的源代码

    2022-11-16 22:14:38
  • SpringBoot 创建容器的实现

    2022-04-03 08:41:02
  • JavaGUI常用三种布局使用介绍

    2023-05-19 08:01:06
  • Spring Boot中利用JavaMailSender发送邮件的方法示例(附源码)

    2023-05-13 02:13:08
  • IDEA下载并大学生edu邮箱认证免费使用教程(图文)

    2022-10-10 14:23:02
  • 详解SpringMVC @RequestBody接收Json对象字符串

    2022-03-20 05:00:10
  • Java日常练习题,每天进步一点点(24)

    2022-11-17 06:40:40
  • MVC框架自定义实现过程

    2021-07-24 03:31:47
  • HttpServletRequest对象常用功能_动力节点Java学院整理

    2022-01-05 10:37:08
  • Java使用synchronized实现互斥锁功能示例

    2022-10-20 00:47:49
  • Android多渠道打包神器ProductFlavor详解

    2021-06-11 19:48:22
  • My eclipse 端口占用(9360)问题解决办法

    2023-05-19 02:34:32
  • java状态机方案解决订单状态扭转示例详解

    2022-01-10 02:55:43
  • java使用IO流对数组排序实例讲解

    2023-09-04 02:24:19
  • asp之家 软件编程 m.aspxhome.com