编码格式

JAVA中的字符,使用的都是Unicode编码。而显示输出和键盘都是采用本地编码。


UTF-8是一种比较常用的编码格式,它是Unicode编码的延伸:它里面的ASCII码只占1个字节,而其他国家的字符,占2或3个字节。


某个字符具体是占几个字节,取决于其所对应的Unicode码的16进制表示的范围:
如果某字符所对应的字节的高位,第1个bit位为0,它就只占用1个字节。
如果某字符所对应的字节的高位,前3个bit位为110,它就占用2个字节。
字节的第2位,前2个bit位为10。
如果某字符所对应的字节的高位,前4个bit位为1110,它就占用3个字节。
字节的第2和第3位,前2个bit位都为10。


UTF-8编码,相对于Unicode编码来说,有以下优点:

1,对于ASCII码来说,UTF-8不会出现内容为0x00的情况。(0x00与某些编程语言有一定的冲突)

2,便于应用程序检测数据在传输过程中是否发生了错误。(例如传输中字符丢失问题,因为UTF-8的字节开头都为0,110或1110这3种,所以丢了某个字节后,也可以判断下一个字符是从哪个字节开始的)

3,节省ASCII码(英文)类型文件的存储空间,因为UTF-8的ASCII码类型数据的储存只占1个字节,而Unicode却是占2个。而且ASCII码格式的文件不需要转换就会符合UTF-8编码的格式。


它的缺点:对于像中日韩等国家的文字,大都占3个字节,造成资源浪费。


UTF-16编码,是对Unicode编码的扩充,对Unicode编码没有影响(也就是说,某个字符用Unicode的表现形式和UTF-16并没有什么区别)。它只是增加了一些Unicode编码中没有表示的语言种类。

因为UTF-16新增加的语言大都用不到,所以可以大致的认为UTF-16和Unicode编码之间没有区别。

UTF-16和Unicode编码格式的字符,在不同体系结构的计算机系统中,在内存中的字节储存位置是不同的。例如:
在Intel CPU的计算机中,内存总是先储存低字节(例如个位,十位等不重要的字节),后储存高字节(例如百位,千位)。而在其他CPU的计算机中却相反。


为了尽量保持外来字符串的正确性,采用一个字节一个字节读取的方式是最稳妥的。

字节是表示计算机内存中最原始的数据,不会产生编码问题。
只有当把字节当作字符来处理的时候,才会有编码问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值