JAVA 编码中文简述

中文编码问题虽然是个老问题,但对不熟悉的人来说还是不好处理的。不过Java中已经有了一套比较成熟的解决方案。

首先对中文编码格式予以简单介绍:
中文编码有三套国标:GB2312,GBK,GB18030,从前到后互为超集。GBK最为常见。这里不展开介绍,具体可以谷歌。

不过国际上通用的还是UTF-8,如果我们自己写中文的话,最好以UTF-8的方式编码,不然处理起来真的很麻烦。

下面以Java读文件为例,说明一下java处理中文编码的方法。

java可以按字符读,也可以按字节流读,不管怎么样,读中文的时候都要涉及到编码解码的问题。

按字符读,不显式指定编码的话,一般是按本地环境的默认字符集,中文就是GBK。

如果显式指定字节解码就要用到InputStreamReader类,它是字节转向字符的桥梁。

它的一个构造方法: InputStreamReader(InputStream,Charset),可以显式的指定解码方式。

如果我们知道了中文文件的编码,在Charset参数中指定,就不会出现乱码了。

当我们用String对象保存中文时,也可以显式的指定编码方式。比如:

String example = "中文字符串";

byte[] b = example.getBytes("UTF-8");  //这个方法将中文重新以UTF-8的方式编码。并返回字节流数组。

String newStr = new String(b,"UTF-8"); // 将字节流以UTF-8的方式,转化为字符串。

实际上,getBytes()是调用Charset类来进行编码的。

Charset类是java内部专门用于编码解码的类,更为显式。

Charset charset = Charset.forName("UTF-8");

ByteBuffer byteBuffer = charset.encode(String);

CharBuffer charBuffer = charset.decode(byteBuffer);

具体展开可以参考下面博客,讲的很清晰:

https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/

原文地址:https://www.cnblogs.com/zqiguoshang/p/5932282.html