计算机只能识别由0和1组成的字符。必须对字符进行编码才能在屏幕上正确显示。
ANSI编码不是一种特定的编码,而是与系统环境领域有关,例如中文本地环境中的GBK编码和英文本地环境中的ASCII编码。为了使计算机支持多种语言,每个国家和地区制定了不同的标准,产生了GB2312、BIG5、JIS等编码标准。各种使用两个字节表示字符的扩展编码称为ANSI 编码。在简体中文系统上,ANSI 编码代表GB2312 编码,在日文操作系统上,ANSI 编码代表JIS 编码。
1、ASCII:每个字符或符号占用一个字节(8位),8位中最高位为0。英文字符和二进制位之间的关系有统一的规则,称为ASCII码。 ASCII编码指定总共128个字符的编码。例如,SPACE 为32(二进制00100000),大写A 为65(二进制01000001)。这128个符号(包括32个不可打印的控制符号)仅占据字节的最后7位,第一位统一设置为0。有些编码对最后128 个值进行编码,8 位中的最高有效位为1。这是扩展ASCII,标准ASCII 通常只有前128 个值。
ASCII码表
2、GB2312、GBK、GB18030编码:GB全称是国标国家标准,GBK全称是国标国展国家标准延伸。 GB18030编码兼容GBK,GBK兼容GB2312。
GB2312:中文编码的早期版本。每个字符占用2个字节。这两个字节的最高位不能为0,因为它们必须与ASCII 兼容(ASCII 冲突)。 GB2312包含6763个汉字和682个特殊符号。
GBK:GB2312只有6763个字符,因此GBK以每个字符占用2个字节的方式对很多汉字进行编码,而不与GB2312和ASCII冲突(即兼容GB2312和ASCII),表示的汉字数量达到20902个。984个中文标点符号、部首等等。注意,这20902个汉字还包括繁体字,但这些繁体字与台湾的Big5编码不兼容。
GB18030:在GBK中,仅仅使用2个字节来表示一个单词已经不够了(2个字节有多达65536种可能的组合,但为了与ASCII兼容,最高有效位是(不能为0)。多余的汉字使用4个字节进行编码。我国于2000年和2005年颁布了两次GB18030规范,其中2005年的规范是在2000年的基础上进一步补充的。 GB18030编码了7万多个汉字,其中包括少数民族字符。 GBK和GB2312都是2个字节,GB18030比GBK多了4个字节。
3. Latin1编码(ISO-8859-1编码):基于ASCII的单字节编码,充分利用接下来的128个值,最多可以表示256个字符或符号加上仅前128个。编码方法。和ASCII一样,占据一个字节的全部256个值。
ISO-8859-1
4、Unicode:称为单一编码,它对世界各国的字符编码进行统一编码。编码范围是0x0000到0x10FFFF。 Unicode 是一种字符集,它为每个字符分配一个代码值,并为每个符号仅指定一个二进制值。 Unicode 只是字符集的代码点,而UTF-8、UTF-16 和UTF-32 是实际的字符编码规则。
5、UTF-8(8bit Unicode Transformation Format):一种变长编码方式,用1到4个字节来表达一个符号,字节长度根据符号的不同而变化。 UTF-8编码:如果一个字节的第一位是0,那么该字节是唯一的字符。如果第一位为1,则连续1的个数表示当前字符占用了多少个字节。对于英文字符,UTF-8编码和ASCII编码是相同的。
utf-8编码
6、UTF-16编码:也是一种变长字符编码,将字符编码为2或4个字节。对于Unicode码小于0x10000的字符,使用2个字节来存储,直接存储Unicode码,无需进行编码转换。 Unicode 代码在0x10000 到0x10FFFF 之间的字符使用4 个字节来存储。各部分是分开的。前2个字节的前6位二进制数固定为110110,后2个字节的前6位二进制数固定为110111。 每个部分中剩余的10 个二进制数字表示符号的Unicode 代码减去尾部部分。 Unicode 代码大于0x10FFFF 的结果无法以UTF-16 进行编码。
7. UTF-32:每个代码点以4个字节存储。存储的值是Unicode 等效值。不编码直接存储。
8、UTF-8、UTF-16、UTF-32之间的转换: UTF-8、UTF-16、UTF-32反过来说,是用不同的二进制格式表示Unicode代码的编码规则。还可以获得对应的Unicode编码。如果您有Unicode 代码,则可以根据UTF-8、UTF-16 和UTF-32 编码方案将其转换为任何编码。
注:Unicode是一种字符集,UTF-8、UTF-16等是Unicode字符集的编码。
附件: 小端和大端:第一个字节以大端存储,第二个字节以小端存储。 UCS-2(以两个八位字节编码的通用字符集)格式可以存储Unicode 代码。 Unicode 规范定义在每个文件的开头添加一个字符来指示编码顺序;该字符称为“零宽度不间断空格”,并表示前两个字符。如果文本文件的某个部分是FE FF,则表示该文件使用的是大端模式;如果前两个字节是FF FE,则表示该文件使用的是小端模式。
BOM:BOM(Byte Order Mark)是为UTF-16和UTF-32提供的,用于标记字节顺序。 UTF-8 不需要BOM。虽然Unicode 标准允许在UTF-8 中使用BOM,但不带BOM 的UTF-8 才是标准格式。 UTF-8 和带BOM 的UTF-8 的区别在于有无BOM,即文件开头有无U+FEFF。避免在UTF-8 网页代码中使用BOM。如果不使用,就会经常出现错误。
版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。