编码问题笔记

1:JVM存储格式:JVM中,数据都是二字节存储的。int、byte等一字节长的数据在Java中也是以两字节存储,高八位是0。而long、double则是真正的两字节数据类型。

 

2:JVM读写数据时,先读写低八位,再读写高八位,所以long、double两字节数据的读写分两步进行,故不是原子性的,而单字节长的数据则由于高八位无影响,所以是原子性的。

 

3:乱码的原因:在IDE中,按照IDE的编码类似显示;存到文档中,按照文档的编码成byte序列存储;读到系统中、项目中、浏览器中,则按照所处环境解码显示。

     以上三者,一旦出现中间有不一致的。例如:A格式编码得到的byte序列,读取到浏览器后以B格式解码显示,就会乱码。

4:GBK编码:中文存储占2字节,英文1字节。

 

5:UTF-8编码:中文存储占3字节,英文1字节。

 

6:Java是双字节编码,称为 utf-16be:在Java中无论中文还是英文字符都是2字节长。

 

7:避免乱码:读取的字节序列是什么格式编码的,就按什么方式解码:

String str=new String(byte[],"encoding");

  如果不指明解码格式,则按照IDE项目的默认编码方式来解码该byte[]来生成字符串。

 

8:文本文档是存储的是字节序列,可以存储任意编码格式的字节序列。

    在中文机器创建的文本文档,默认编码方式是ANSI,如果放其他编码格式的,则显示乱码。(因为显示就是解码)

 

转载于:https://www.cnblogs.com/ygj0930/p/6648261.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值