编码格式 和 长度计算

》字符串的结束符

在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。

 

Unicode编码

Unicode码内容:它前128个字符就是ASCII码,之后是扩展码。

ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

 

编号从0开始的32种状态分别规定了特殊的用途,终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作。于是就把这些0x20以下的字节状态称为"控制码"。

 

GBK编码

》GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年10月制定, 1995年12月正式发布,目前中文版的WIN95、WIN98、WINDOWS NT以及WINDOWS 2000、WINDOWS XP、WIN 7等都支持GBK编码方案。

》字符有一字节和双字节编码,00–7F范围内是一位,和ASCII保持一致,此范围内严格上说有96个字符和32个控制符号。

00-7F属于ASCII编码, 8140-FEFE才属于GBK编码, GBK编码支持与ASCII编码混编. 字符串中, 英文与数字字符属于ASCII编码, 故占用一个字节, 中文字符属于GBK编码, 故占用两个字节。实际是GBK字符集里也有英文与数字字符, 但属于全角字符, 占用两字节,看使用者用的是半角的还是全角的。

 

 

UTF-8编码

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

占2个字节的:带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码

占3个字节的:基本等同于GBK,含21000多个汉字

占4个字节的:中日韩超大字符集里面的汉字,有5万多个,通常汉字占三个字节,扩展B区以后的汉字占四个字节。

一个utf8数字占1个字节

一个utf8英文字母占1个字节

少数是汉字每个占用3个字节,多数占用4个字节。

UTF-8采用如下所示的二进制方式来表示31位UCS-4,X表示有效位:

1字节 0XXXXXXX

2字节 110XXXXX 10XXXXXX

3字节 1110XXXX 10XXXXXX 10XXXXXX

4字节 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX

5字节 111110XX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX

6字节 1111110X 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX

从上可以看得出,如果处在第一字节的引导字节最高位为0,则是一字节。否则看前导1的个数,来确定是几个字节长。前导1与有效位之间有0相隔,也可以通过首字节的值范围来确定字节数。

1字节 0  ~127

2字节 192~223

3字节 224~239

4字节 240~247

5字节 248~251

6字节 252~253

随后的字节每个都以10为前导位,取值范围则在128~191之间。可以立即得知一个字节是否为后续字节,因为引导字节的引导位不是00、01就是11,不会是10。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值