• java下输出中文的一点研究


    网上或者大部分书上都说Java中输出中文使用FileReader类就可以了,但是当你读取一个中文文档时,你会发现,除了乱码,还是乱码。究其原因,这其实是文件流读取时使用的编码方式和文件本身编码方式不同,造成读取出来文件乱码。还有一个细节,当你使用read()直接读取字符输出时,无论如何都是读不出中文的。关于这类问题,给出两种解决方案:

    一、使用BufferedReader类包装一下FileReader类,然后使用BufferedReader::readLine()方法读取一行的String,然后用这个String再去构造一个新的String输出,具体如下:

    FileReader f = new FileReader("test.txt");
    BufferedReader is = new BufferedReader(f);
    String str = null;
    while((str = is.readLine()) != null){
    System.out.println(new String(str.getBytes("GBK","utf-8"));
    }

    这样就能输出大概正确的中文了。为什么说是大概呢?因为它可能还会有“???”或者其他一些糟心的符号。因此这种方法并不完美。另一种方法如下:

    二、使用FileInputStream类读取文件,然后使用InputStreamReader类来封装,最后再使用BufferdReader来读取一行:

    FileInputStream f = new FileInputStream("test.txt");
    InputStreamReader is = new InputStreamReader(f,"utf-8");
    BufferedReader ret = nrew BufferedReader(is);
    
    String str = null;
    
    while((str = ret.readLine()) != null){
    System.out.println(str);
    }

    使用这种方法就能完美显示中文,而没有乱码。但是要求中文文本使用utf-8编码。

    另外,还有一种编码是utf-8-BOM编码,这种编码和utf-8不一样,他在文件开头有三个字节的标识符,如下图第一行:

    ef bb bf 就是文件标识符,上图中第一行是utf-8-BOM的“我是陈宇翔”的十六进制编码,第二行是utf-8的“我是陈宇翔”的十六进制编码。我们发现,第一行的后十五个字节和第二行完全一样。所以当你使用utf-8-BOM的文档,而使用utf-8方式去读取时,输出的第一个字符会是乱码。同时我们还发现,utf-8编码的中文字符是三字节的。

    温润如玉,坚毅如铁。
  • 相关阅读:
    Git简介
    Git之 git status、git diff 的基本使用
    Git之撤销修改 git checkout file、git reset HEAD file 的使用
    git连接gitlab远程仓库
    Git版本回退及 git log 、 git reset hard commit_id 的基本使用
    Git创建版本库及git init 、add 和 commit m 的基本使用
    Git之工作区和暂存区
    Git的由来及分布式版本控制和集中式版本控制的区别
    MariaDB 主从同步与热备
    MariaDB 用户与权限管理
  • 原文地址:https://www.cnblogs.com/heisen/p/9968001.html
Copyright © 2020-2023  润新知