字符编码

最近一直看java基础,看到IO系统中的字符编码一直不是很了解,所以就从网上查资料,然后自己总结了一些。

所谓字符编码就是将字符与二进制进行一个一一映射。

字符编码种类很多

1.ASCII码:英语字符与一个字节的二进制位之间的关系,ASCII码总共规定了128个字符,只占了字节的后7位,最前面一位统一为0, 32~126(共95)是字符,其他的是控制字符或者通信专用符号。

2. Unicode编码

将世界上几乎所有的符号都容纳其中,每个符号都有一个独一无二的编码。这里有个大端和小端的问题,以汉字”严“为例,Unicode码是4E25,需要用2个字节存储,字节4E在前,25在后称为大端,就像读string一样,低地址存高字节,相反,25在前,4E在后为小端。Unicode缺点就是没有规定符号的二进制代码如何存储在计算机上,因为不同的符号需要的字节数不一样,如果用2个字节或者4个字节来表示所有的字符,明显的效率不行,而且还浪费空间。

为此,就出现了UTF-8 编码,其他方式还包括UTF-16, UTF-32。

UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。


3.非Unicode编码

ANSI编码,用2个字节表示一个符号

如GB2312 ,日文编码 JIS ,缺点同一编码值在不同的编码体系里代表不同的文字,容易造成混乱。可以通过转换表的方式转换成unicode。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值