jvm中编码问题以及java操作文件中的编码问题

参考文章:深入理解java中中文编码问题

这篇文章讲java操作其他文件、网络传输中编码问题以及内存中编码问题。

对中文字符后面四种编码格式都能处理,GB2312 与 GBK 编码规则类似,但是 GBK 范围更大,它能处理所有汉字字符,所以 GB2312 与 GBK 比较应该选择 GBK。UTF-16 与 UTF-8 都是处理 Unicode 编码,它们的编码规则不太相同,相对来说 UTF-16 编码效率最高,字符到字节相互转换更简单,进行字符串操作也更好。它适合在本地磁盘和内存之间使用,可以进行字符和字节之间快速切换,如 Java 的内存编码就是采用 UTF-16 编码(连续的编码)。但是它不适合在网络之间传输,因为网络传输容易损坏字节流,一旦字节流损坏将很难恢复,想比较而言 UTF-8 更适合网络传输,对 ASCII 字符采用单字节存储,另外单个字符损坏也不会影响后面其它字符,在编码效率上介于 GBK 和 UTF-16 之间,所以 UTF-8 在编码效率上和编码安全性上做了平衡,是理想的中文编码方式。

在操作文件的时候,如果不指定编码格式,则jvm使用os默认编码(windows中文下为GBK)来解码,再转化成UTF-16在内存中进行操作。当输出内存中的内容的时候,从内存中的编码格式转化成代码中指定的文件编码或网络传输编码(未指定则使用os默认),再进行文件存储或网络传输。


知乎问题:java编译器编码和jvm编码

这个问题讲java源文件的编码和解码问题。

.java文件可以用任何类型的编码,在Java的Class文件里存储的字符串是UTF-8编码的(modified utf-8),jvm中是UTF-16编码。

输出的文件,也可以是任何编码类型的文件。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值