美文网首页
Java编码实验

Java编码实验

作者: jeavenwong | 来源:发表于2019-10-31 16:41 被阅读0次

为了更好的理解什么时候会出现编码问题,做了小实验。

先在本地写了一个txt文件,使用UTF-8编码。

写文件使用UTF-8编码

Java的IDE因为Windows在中文ZN环境下默认本地使用gbk编码,但是我也特地将Java的IDE(eclipse)里的properities里的编码更改为UTF-8编码。(注意: 程序首先编码默认设置里的编码,也就是首先以当前代码源文件的编码为主,如果没有指定就默认为操作系统的编码,中文环境下默认为gbk编码)

更改代码源文件的编码

至此,我程序文件使用编码gbk,但是读取文件使用utf-8编码。

当读取文件时,文件都是以字节流的形式传输,所以会先根据本地文件的编码格式utf-8将文件内容字符串进行编码,然后再由程序读进内存。当字节码读进内存后会根据程序的编码gbk对字节流进行解码,但是gbk编码中文用两个字节,utf-8编码中文用3个字节,所以就错误的解码成了错误的字符。然后才是将解码后的字符根据Java内码(unicode)编码为unicode编码,之后内存中的这个字符串在内存中都是这个编码。如果需要使用getBytes()转码,都是先用unicode解码再将解码后的字符进行指定编码格式的编码。

因为读进内存的字符串是错误的unicode编码,所以不管转化为什么编码,显示的时候都是错误的字符。

结果显示错误的字符

结论:

要想编码正确,首先发送方使用的编码和接收方使用的编码要一致,因为发送方要对发送的数据进行编码成字节流,接收方要对传输过来的字节流进行解码,如果不一致就会出现字符错误。

而Java的内码unicode只是中介,不影响两个编码之间的转换。

相关文章

网友评论

      本文标题:Java编码实验

      本文链接:https://www.haomeiwen.com/subject/abptbctx.html