返回顶部
首页 > 资讯 > 后端开发 > Python >java 使用readLine() 乱码的解决
  • 144
分享到

java 使用readLine() 乱码的解决

2024-04-02 19:04:59 144人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录使用readLine() 乱码的解决本人在公司开发程序遇到了读取一行乱码小结一下调用readLine的乱码问题下面提供的是readLine字符流指定编码方式的方法使用readLi

使用readLine() 乱码的解决

本人在公司开发程序遇到了读取一行乱码

eclipse 默认为utf-8


FileInputStream f4 = new FileInputStream(new File("F:\\bb.txt"));
BufferedReader bufferedReader2 = new BufferedReader(new InputStreamReader(f4));
String readLine = bufferedReader2.readLine(); //会输出乱码

测试文件有两个文本文件分别为,aa.txt (UTF-8编码),bb.txt(GB2312编码)两个文件中的内容都为一个字符 中:

前提知识: utf-8中文占三个字节,GB2312中文占两个字节

测试 代码:


public class EncodeTest {
    @Test
    public void test1() throws Exception{
        FileInputStream f1 = new FileInputStream(new File("F:\\aa.txt"));
        byte[] b1  =  new byte[f1.available()];
        f1.read(b1);
        for(byte b : b1){
            System.out.println(b);
        }
        System.out.println(new String(b1));
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
        FileInputStream f2 = new FileInputStream(new File("F:\\bb.txt"));
        byte[] b2  =  new byte[f2.available()];
        f2.read(b2);
        for(byte b : b2){
            System.out.println(b);
            byte[] tb = new byte[]{b};
            String lm = new String(tb);
            System.out.println("当前乱码"+lm);
            byte[] lm_b = lm.getBytes();
            System.out.println("-----------乱码 start--------");
            for(byte bn: lm_b){
                System.out.println(bn);
            }
            System.out.println("-----------乱码 end--------");
        }
        System.out.println(new String(b2,"gb2312"));
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
        FileInputStream f3 = new FileInputStream(new File("F:\\bb.txt"));
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(f3));
        String readLine2 = bufferedReader.readLine();
        byte[] b3 = readLine2.getBytes("UTF-8");
        for(byte b : b3){
            System.out.println(b);
        }
        System.out.println(new String(b3));
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
        
        FileInputStream f4 = new FileInputStream(new File("F:\\bb.txt"));
        BufferedReader bufferedReader2 = new BufferedReader(new InputStreamReader(f4,"GB2312"));
        String readLine = bufferedReader2.readLine();
        byte[] b4 =readLine.getBytes("UTF-8");
        for(byte b : b4){
            System.out.println(b);
        }
        System.out.println(new String(b4));
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
    }
}

通过分析打印结果:

-28 #字节1
-72 #字节2
-83 #字节3
中 #utf-8 解码后字符为:中,没有出现乱码
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-42 #字节1
当前乱码� #将 -42 按照utf-8 解码后的字符是乱码,然后再将乱码按照utf-8编码得到的字节如下
-----------乱码 start--------
-17
-65
-67
-----------乱码 end--------
-48 #字节2
当前乱码� ##将 -48 按照utf-8 解码后的字符是乱码,然后再将乱码按照utf-8编码得到的字节如下
-----------乱码 start--------
-17
-65
-67
-----------乱码 end--------
中 # 将 字节1: -42和字节2:-48 按照 gb2312 解码 后为字符 中
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-17 # 这里为readline()方法没有设置使用eclipse默认编码 默认使用utf-8 (读取bb.txt)
-65
-67
-17
-65
-67
�� # 输出的中文为乱码
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-28 #这里为readline()方法设置了编码为GB2312 读取一行文字为中 (读取bb.txt)
-72
-83

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

小结一下

new BufferedReader(new InputStreamReader(f4)); 默认用utf-8去解码字节,而bb.txt文件内容的字符是gb2312 所以该 中 字符在磁盘中占两个字节,而utf-8编码集中的中文占3个字节,而readline()的时候发现是两个字节,当前使用的又是utf-8,所以java底层就将这两个字节单独使用utf-8进行了解码, 每一个字节 使用utf-8编码一次为 一个char字符,所以经过utf-8将两个字节分别解码后的最终数据为两个乱码字符,

读者可以看上面的代码和打印的信息,两字符个乱码编码后的字节分别为-17 -65 -67(红色),和上面单独将一个字节用utf-8 接码后的字符再按照utf-8编码后得到的字节 -17 -65 -67(蓝色)一样,也就是说 当字节按照utf-8 解码时在utf-8编码集中找不到对应的正确的字符时就会默认作为� 输出,而� 对应的utf-8 字节 -17 -65 -67。所以当找不到对应正确的编码字符时都会按照 -17 -65 -67 对应的 字符 � 输出。

常识: 当使用 new BufferedReader(new InputStreamReader(f4),"文本源的编码") 文本源的编码一定要写。这样就不会有乱码。

调用readLine的乱码问题

readLine是一个很好用的方法,但是作为字符流的方法,确实会遇到各种关于编码方面的问题。但是用字节流来处理数据,比如说一个文本文件,要作按行处理的话,又会显得很不灵活。

下面提供的是readLine字符流指定编码方式的方法


//定义一个File对象
File someFile = new File("somefile.txt");
//输入流
FileInputStream fis = new FileInputStream(someFile);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); //指定以UTF-8编码读入
BufferedReader br = new BufferedReader(isr);
//输出流
FileOutputStream fos = new FileOutputStream(someFile + ".生成的文件.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); //指定以UTF-8编码输出
while ((line = br.readLine()) != null) {
//osw.write("write something");
osw.write(line);
}
//关闭IO流
br.close();
osw.close();

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java 使用readLine() 乱码的解决

本文链接: https://lsjlt.com/news/159510.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java 使用readLine() 乱码的解决
    目录使用readLine() 乱码的解决本人在公司开发程序遇到了读取一行乱码小结一下调用readLine的乱码问题下面提供的是readLine字符流指定编码方式的方法使用readLi...
    99+
    2024-04-02
  • java使用readLine() 乱码的解决方法
    这期内容当中小编将会给大家带来有关java使用readLine() 乱码的解决方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。使用readLine() 乱码的解决本人在公司开发程序遇到了读取 ...
    99+
    2023-06-22
  • java中使用jar包乱码解决方法
    java使用jar包乱码解决方法:修改Eclipse中文本文件的默认编码:windows->Preferences->general->Workspace->Text file encoding设置为UTF-8。修改JAVA源文件的默认编码...
    99+
    2021-06-03
    java 乱码
  • MFC Java 使用socket 中文乱码解决方法
    在 MFC 中使用 Java 的 Socket 进行通信时,中文乱码问题可能出现在两个方面:发送端和接收端。下面给出解决方法:发送端...
    99+
    2023-10-12
    MFC
  • 使用JAVA编程出现乱码如何解决
    在Java编程中出现乱码的问题通常是因为编码不一致导致的。下面是一些常见的解决方法:1. 明确设置编码:在程序中使用`setChar...
    99+
    2023-08-25
    JAVA
  • java servlet乱码怎么解决
    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,您可以收集来自网页表单的用户输入,...
    99+
    2019-10-24
    java
  • java web乱码解决方法
    设置文件的保存编码格式,这个一般在新建项目时,设置了GBK的编码格式,这时文件的页面编码格式是GBK的,而保存格式是ANSI的,后来把项目及文件的编码格式改为utf-8的编码格式后,依然出现中文乱码,这就是因为已经存在的文件的保存编码格式还...
    99+
    2014-05-26
    java 乱码
  • eclipse java 乱码怎么解决
    eclipse项目代码显示中文乱码解决方法有4种:1、设置工作空间的编码方式进行点击菜单中的windows菜单选择下拉菜单中进行选择为Preferences选项。进入general的选项,选中workspace的选项,点击Apply,点击O...
    99+
    2018-05-03
    java入门 eclipse java 乱码
  • 解决@ConfigurationProperties注解的使用及乱码问题
    目录@ConfigurationProperties解决方法第二种不推荐写法@ConfigurationProperties 作用:用于获取配置文件中的属性定义并绑定到javaBea...
    99+
    2022-11-13
    @ConfigurationProperties注解 @ConfigurationProperties使用 @ConfigurationProperties乱码
  • java中解压乱码解决方法
    第一种使用ant实现的zip解压缩,其中解压的乱码注意使用public void unZip(String unZipFileName,String outputPath) 其中this.zipFile = new ZipFile(unZi...
    99+
    2020-06-12
    java
  • java页面乱码解决方法
    在页面提交到tomcat乱码 解决方法是在tomcat/conf/server.xml中进行配置(推荐:java视频教程)以tomcat6.0.32为例,需将以下代码:Xml代码 改为:Xml代码 如果tomcat前端有Apache或是Ng...
    99+
    2021-02-14
    java
  • java中string乱码解决方法
    java中string乱码解决方法:(推荐:java视频教程)对字符串进行转码来解决字符串乱码代码如下:System.out.println(str); String str1 = new String(str.ge...
    99+
    2021-08-15
    java
  • java读oracle乱码解决方法
    当Java读Oracle遇到中文乱码时,我们就需要进行转码。(推荐:java视频教程)转码方法:纯手工转码将读到的字符串s进行转码,如:new String(s.getByte(A), B)Druiddruid是阿里巴巴自己开发的一个驱动,...
    99+
    2015-08-19
    java 乱码
  • java中url乱码解决方法
    java中url乱码解决方法:(推荐:java视频教程)将字符串转码:newString(“xxxxx”.getBytes(“iso-8859-1”),”utf-8”)这种转码方式有很大的弊端,因为它是使用指定的字符集将此String编码为...
    99+
    2017-05-02
    java
  • java网页乱码解决方法
    java网页乱码常见地方如下:jsp页面中。EL表达式或者直接取值,哪怕写个固定的中文显示都会乱。java代码。前端到后端传输值,乱码。jsp页面编码。只要写jsp的都不陌生,更改页面的字符集。java后台代码。如果是java web项目,...
    99+
    2021-08-10
    java
  • java问号乱码解决方法
    在基于Java的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号。(推荐:java视频教程)这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。...
    99+
    2020-03-31
    java
  • java接口乱码解决方法
    通过接口上传中文信息时,在java后台获取值时request.getParameter(),会出现乱码。在代码中用各种转码都没有处理掉。(java相关视频教程推荐:java视频教程)需要在tomcat配置文件中修改:/conf/server...
    99+
    2016-06-15
    java基础 java
  • java编译乱码解决方法
    Java编译源代码时,默认会从操作系统获取codepage,若你安装操作系统时不小心安装了英文版的,可能就会在编译java源码时产生乱码。请看下面测试代码:package com.test; public class Run { pub...
    99+
    2018-07-24
    java基础 java
  • java提交乱码解决方法
    java提交乱码解决方法:如果提交方式为post,想不乱码,只需要在服务器端设置request对象的编码即可,客户端以哪种编码提交的,服务器端的request对象就以对应的编码接收,比如客户端是以UTF-8编码提交的,那么服务器端reque...
    99+
    2015-01-02
    java 乱码
  • java文字乱码解决方法
    在myeclipse中可以设置文件的编码格式,但是当我们使用Scanner进行键入时,由于Windows使用的是GBK编码,所以如果设置的编码格式不是GBK的话会出现中文乱码问题。前台页面向后台发送请求时如果是get方式,会默认以ISO88...
    99+
    2015-09-19
    java 乱码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作