ANSI,ASCII,Unicode,UTF-8编码
ANSI编码:这个是windows系统自带的可以由地区来动态决定的编码,可在系统中设定,你把系统区域设置为美国那就是ASCII,把系统区域设置为*那就是GB2312简体中文等
ASCII编码:占一个字节,最高位是0,后面7位用来表示字符,一共是128个字符,下图只有94个,除外还有32个不能打印出来的控制符号
GB2312编码:
编码范围:A1A1-FEFE,其中汉字编码范围:B0A1-F7FE
GB2312编码:1981年5月1日发布的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。
BIG5编码:*地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。
GBK编码:1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。
GB18030编码:2000年3月17日发布的汉字编码国家标准,是对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个字节):
UTF-8:(12个字节)
UTF-8-BOM:(15个字节,此处发现相比较UTF-8 多了一个开头EF BB BF)
GB2312(15个字节,此处发现它和UTF-8-BOM的结果一致)
Big5(15个字节,此处发现它和UTF-8-BOM的结果一致)
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值获取字符
推荐阅读
-
字符编码 ASCII unicode UTF-8
-
ASCII、Unicode、UTF-8以及彼此的联系
-
终于搞明白Unicode,ASCII,UTF8,UCS2编码是啥了
-
各种编码格式(GB2312,GBK,GB18030,unicode,utf-8)之间的关系
-
字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)
-
[python] python 编码ASCII、Unicode、utf-8
-
ANSI,ASCII,Unicode,UTF-8编码
-
字符串编码:ASCII、GB系列、Unicode、UTF-8
-
字符编码:ASCII,Unicode 和 UTF-8
-
ANSI和Unicode中的汉字编码 (转)