欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ANSI,ASCII,Unicode,UTF-8编码

程序员文章站 2022-07-14 19:06:00
...

ANSI编码:这个是windows系统自带的可以由地区来动态决定的编码,可在系统中设定,你把系统区域设置为美国那就是ASCII,把系统区域设置为*那就是GB2312简体中文等

ASCII编码:占一个字节,最高位是0,后面7位用来表示字符,一共是128个字符,下图只有94个,除外还有32个不能打印出来的控制符号
ANSI,ASCII,Unicode,UTF-8编码
GB2312编码
编码范围:A1A1-FEFE,其中汉字编码范围:B0A1-F7FE

GB2312编码:198151日发布的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。

BIG5编码:*地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。

GBK编码:199512月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。

GB18030编码:2000317日发布的汉字编码国家标准,是对GBK编码的扩充,覆盖中文、日文、朝鲜语和中国少数民族文字,其中收录27484个汉字。GB18030字符集采用单字节、双字节和四字节三种方式对字符编码。兼容GBK和GB2312字符集。

Unicode编码:国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换

Unicode编码:Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,它指的是UCS-2编码方式,就是是直接存入unicode的值来进行编码,unicode的每个值用两个字节来表示,那么它的表示范围就是0-65536个字符,这里面又包含两个方式(Big endian)和(Little endian),默认是后者小头方式,所以一个文本文件如果采用Unicode编码,那么它文件开头两个字节会说明是那种,FF FE表示小头,FE FF表示大头,如果要表示的字符超过了65536,那就使用UCS-4这个编码,它使用四个字节表示一个字符
不管是UCS-2还是UCS-4他只是标记了一个字符唯一的一个值而已,如果我们用这种编码方式会比较死板,就是任何字符都必须要使用2个字节或者四个字节的方式来读取,那么这样就会造成资源的浪费,针对这种浪费就推出了UTF-8编码和UTF-16编码

看这个字符串:1111111111
编码如下

Unicode(大头)编码(26个字节):ANSI,ASCII,Unicode,UTF-8编码
UTF-8:(12个字节)ANSI,ASCII,Unicode,UTF-8编码
UTF-8-BOM:(15个字节,此处发现相比较UTF-8 多了一个开头EF BB BF)ANSI,ASCII,Unicode,UTF-8编码
GB2312(15个字节,此处发现它和UTF-8-BOM的结果一致
ANSI,ASCII,Unicode,UTF-8编码
Big5(15个字节,此处发现它和UTF-8-BOM的结果一致)
ANSI,ASCII,Unicode,UTF-8编码

UTF-8编码:Unicode编码的一个子集,unicode规定字符编码的长度是两个字节,一个汉字的范围是0X4E00到0x9FA5,这个说的是unicode值,由于unicode编码是固定长度的,所以搞了一个变种出来UTF-8编码,这种编码是不定长的,对于一个字符的存取,既包括了它本身的值也包含了它的控制信息,这个控制信息就是我们要如何读取它,看看uft8是怎么把值控制信息结合在一起的
它的文件开头:EF BB BF

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 

跟据上表,解读 UTF-8 编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节UTF-8
对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节

总结
世界上所有的字符都被Unicode统一编码,会给他们一个唯一的值来标记他们,这个值叫Unicode值
对于其他的编码实现,其实就是把字符的Unicode值和控制值镶嵌在一起形成一个新的字符,比如UTF8

程序在读取一个文件时,会首先检测它的编码,可以是如下几种
ASCII:一个字节一个字节读,计算Unicode值
Unicode(UCS-2):两个两个字节读,计算Unicode值获取字符
Unicode(UCS-4):四个四个字节读,计算Unicode值获取字符
UTF-8:不定长的有规律的读,靠拼接出它表示的字符,计算Unicode值获取字符
GB2312:不定长的有规律的读,靠拼接出它表示的字符,计算Unicode值获取字符

相关标签: 编码