字符串编码

一 、字符串编码分为四种  

1.ASCII码

为建立英文字符和二进制关系所制定的编码规范,代表了128个字符,包括英文字符,阿拉伯数字,西文字符以及32个控制字符。用一个字节表示具体的字符,但后来只用7位来表示字符(2^7=128)。(一共8位且最前面那位为0)  (0000 0000=>0111 1111)

扩展的ASCII码

欧洲部分国家语言中又拼音,7字节不够用。一些国家利用字节中闲置的最高位编入新的符号。这些国家使用的编码体系最多可表达256个字符。同时带来的问题是:不同国家有不同字母,都是用256个字符编码代表的字母依然不一样。例如。130在发育编码中代表了é,希伯来语中代表了字母Gimel (ג),俄语编码中又代表了另一个符号。但是所有编码在0-127表示的符号是一样的,不一样的只有128-255这段。由于此问题才诞生了Unicode编码。(1000 0000 =>1111 1111)

2.Unicode符号集

一开始是UCS-2字符集  最开始可表示2^16(65536字符)

UCS-4  2^36(43亿)

包含世界所有符号,且每个符号都独一无二。比如U+0639表示阿拉伯字母Ain,U+0041表示英文大写字母A,U+4E25表示汉字“严”。

Unicode其实是符号集(世界上所有符号的符号集),并不是新的编码方式。

 

3.UTF-8

由UCS-2  到UCS-4演变过来的

0x0000 0000 - 0x0000 007F : 0xxxxxxx

0x0000 0080 - 0x0000 07FF : 110xxxxx 10xxxxxx

0x0000 0800 - 0x0000 FFFF : 1110xxxx 10xxxxxx 10xxxxxx

0x0001 0000 - 0x0010 FFFF : 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

例:王:0x0000 738B - 0000 0000 0000 0000 0111 0011 1000 1011 -1110 0111 1000 1110 1000 1011

0xe7 0x8e 0x8b

使用最广的编码方式,实际上是Unicode的实现方式。其他实现方式还包括UTF-16和UTF-32

特点:变长的编码方式。可使用1~4个字节表示符号,根据不同符号变化字节长度

规则:

1)单字节符号,字节第一位设为0,后面7位为这个符号的Unicode码。因此对于英文字母,UTF-8编码和ASCII码相同

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位设为10。剩下没有提及的二进制位,全部为这个符号的unicode码。

GBK = utf-8  会出现乱码 

4 GBK/GB2312/GB18030

GBK和GB2312都是针对简体字的编码,只是GB2312只支持六千多个汉字编码,而GBK支持1万多个汉字编码。而GB18030是用于繁体字的编码。汉字存储时都是用两个字节来储存。

GB2312

94个区  0-09收录除汉字682个字符   10-15空白   16-55收录一级汉字,拼音排序  56-87收录二级汉字  部首笔画排序  88-94空白

例如  侃  的码位是 5709(57区0行9列)  转换16进制分别57 =>0x39   09=>0x09   

0x39+0xA0=0xD9   0x09+0xA0=0xA9 (+A0的原因  就是+160  GB2312要向下兼容ASCII  所以是为了和ASCII做区分  高位和低位都是大于127的)     0xD90xA9

GBK

不再规定低位大于127  

GB18030 

少数民族

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值