计算机常见编码
一. 有关编码的基础知识
1. 位 bit 最小的单元
字节 byte 机器语言的单位
1byte=8bits
1KB=1024byte
1MB=1024KB
1GB=1024MB
2. 二进制 binary
八进制 octal
十进制 decimal
十六进制 hex
3. 字符:是各种文字和符号的总称,包括各个国家的文字,标点符号,图形符号,数字等。
字符集:字符集是多个符号的集合,每个字符集包含的字符个数不同。
字符编码:字符集只是规定了有哪些字符,而最终决定采用哪些字符,每一个字符用多少字节表示等问题,则是由编码来决定的。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。
二. 常见字符集的编码介绍:
常见的字符集有:ASCII 字符集,GB2312字符集,BIG5字符集,GB18030字符集,Unicode 字符集,下面一一介绍:
1. ASCII 字符集:
定义:
美国信息互换标准代码,是基于罗马字母表的一套电脑编码系统,主要显
示英语和一些西欧语言,是现今最通用的单字节编码系统。
包含内容:
控制字符(回车键,退格,换行键等)
可显示字符(英文大小写,阿拉伯数字,西文符号)
扩展字符集(表格符号,计算符号,希腊字母,拉丁符号)
编码方式:
第0-31号及127号是控制字符或通讯专用字符;
第32-126号是字符,其中48-57号为0-9十个阿拉伯数字,65-90号为26
个大写英文字母,97-122号为26个英文小写字母,其余为一些标点符号,
运算符号等。
在计算机存储单元中,一个ASCII 码值占一个字节(8个二进制位),最高
位是用作奇偶检验位。【奇偶校验是指:在代码传送的过程中,用来检验
是否出错的一种方法。】奇偶校验分为奇校验和偶校验。奇校验规定:正
确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位添1;
偶校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则
在最高位添1。
2. GB2312字符集:
定义:
信息交换用汉字编码字符集。是中国国家标准的简体中文字符集,它所收
录的汉字已经覆盖99.75%的使用频率,在中国大陆和新加坡广泛使用。
包含内容:
GB2312收录了简化汉字及一般字符,序号,数字,拉丁字母,日文假名,
希腊字母,俄文字母,汉语拼音符号,汉语注音字母,共7445个图形字
符。其中包括6763个汉字,一级汉字3755个,二级汉字3008个。
编码方式:
GB2312对所收汉字进行了“分区”处理,每区含有94个汉字或者符号,
这种表示方法也叫做“区位码”。
它是用双字节表示的,前面的字节为第一字节,又称“高字节”,后面的
为第二字节,“低字节”。
高位字节,把01-87区的区号加上0xA0(相当于数字160);低位字节把
01-94区的区号加上0xA0(相当于数字160)。
举个简单的小例子:第一个汉字——“啊”,它的区号为16,位号01,则
区位码是1601。则高字节位:16+0xA0=0xB0;低字节位:01+0xA0=0xA1,
所以“啊”的汉字处理编码为0xB0A1。
3. GBK 字符集:
定义:
GBK 是GB2312字符集的扩展(K ),它收录了21886个符号,它分为汉字
区和图形符号区,汉字区包括21003个字符。GBK 字符集主要扩展了繁体
中文字的支持。
4. BIG5字符集:
定义:
又称大五码,由台湾五家软件公司创立。因为当时台湾没有一个标准的字
符集,而且GB2312又没有收录繁体字,所以才推出了BIG5。
包含内容:
BIG5字符集共收录了13053个中文字,该字符集在台湾使用。但是没有
考虑到社会上流通的人名,地方用字,方言用字,化学及生物科等用字,
没有包含日文平假名及片假字母。
编码方式:
BIG5也采用双字节存储方法,一两个字节编码一个字。高位字节的编码
范围是0xA1-0xF9, 低位字节的编码范围是0xA1-0xFE 。
5. GB18030字符集:
定义:
GB18030字符集标准解决汉字,日文假名,朝鲜语和中国少数民族文字组
成的大字符集计算机编码问题。
包含内容:
该标准的字符总编码空间超过150万个编码位,收录了27484个汉字,
覆盖中文,日文,朝鲜语和中国少数民族文字。满足中国大陆,香港,台
湾,日本和韩国等东南亚地区信息交换多文种,大字量,多用途,统一编
码格式的要求。
编码方式:
GB8030标准采用单字节,双字节和四字节三种方式对字符编码。
单字节部分使用0x00-0x7F 码(对应于ASCII 码的相应码);
双字节部分,首字节码从0x81-0xFE, 尾字节码分别是0x40-0x7E 和
0x80-0xFE 。
四字节部分采用0x30-0x39作为双字节编码扩充的后缀,这样扩充的四字
节编码,其范围是0x81308130-0x0xFE39FE39, 其中第一,三个字节编码位
均为0x81-0xFE ,第二,四个为0x30-0x39。
6. Unicode 字符集:
定义:
University multiple-object coded character set(通用多八位编码字符集),
支持世界上超过650种语言的国际字符。Unicode 允许在同一服务器上混
合使用不同语言,它为每种语言的每个字符设定了统一并且唯一的二进制
编码,以满足跨平台,跨语言进行文本转换,处理的要求。
编码方式:
Unicode 标准始终使用十六进制数字,固定使用2个字节来表示一个字符,
共可以表示65536个字符。而且书写时在前面加上前缀“U+”,例如A 的
编码是004116,则书写成“U+0041”。
Unicode 字符集包含的编码方案:
● UTF-8:
UTF8是unicode 其中的一个使用方式。UTF 的意思是:unicode
translation format,即把unicode 转作某种格式的意思。
UTF-8使用可变长度字节来存储unicode 字符,如ASCII 字母还是采用
一个字符来存储,希腊字母等采用2个字符来存储,而常用的汉字要
使用3字节,辅助平面字符则使用4字节。
● UTF-16:
使用一个或两个未分配的16位代码单元的序列对unicode 代码点进
行编码,即2个字节表示一个字符。
● UTF-32:
将每一个unicode 代码点表示为相同值的32位整数。
● 关于unicode 编码的一个问题:
使用记事本另存为时,可以在ANSI ,GBK,Unicode ,unicode big endian
和UTF-8这几种编码之间相互转换。同样是txt 文件,windows 是怎
么识别编码的呢?
答:平时注意的话可以发现Unicode ,unicode big endian和UTF-8编
码的txt 文件的开头会多出几个字节,分别是(FF,FE),(FE,FF ),
(EF,BB,BF )。那么这些标记都是基于什么标准呢?
ANSI 字符集:ASCII 字符集,以及由此派生并兼容的字符集。
UTF-16与UTF-8:如“连通”两个字,在UTF-16中为:DE 8F 1A 90,
两个字节决定一个汉字;在UTF-8中则为:E8 BF 9E E9 80 9A,即3
个字节决定一个字符。
当一个软件打开一个文本时,首先是要决定这个文本究竟是使用哪种
字符集的哪种编码保存的,软件一般采用三种方式来决定文本的字符
集和编码:检测文件头标识,提示用户选择,根据一定的规则猜测。
不同编码方式的开头字节如下:
EF BB BF UTF-8
FF FE UTF-16,little endian
FE FF UTF-16,big endian
FF FE 00 00 UTF-32, little endian
00 00 FE FF UTF-32,big endian
注:endian 是指字节序,big endian(大尾)和little endian(小尾)
是CPU 处理多字节数的不同方式。例如“汉”的unicode 编码是6C49,
写到文件中,如果将6C 写在前面就是big endian,将49写在前面就
是little endian。
7.总结:
从ASCII ,GB2312,GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一的处理。区分中文编码的方法是高字节的最高位不为0。
计算机使用的缺省编码方式就是计算机的内码。有的中文windows 的缺省内码还是GBK ,可以通过GB18030升级包升级到GB1030。不过相对GBK 新增的字符,普通人很难用到的,通常我们用GBK 来指代中文windows 内码。
GB2312的原文是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。
计算机常见编码
一. 有关编码的基础知识
1. 位 bit 最小的单元
字节 byte 机器语言的单位
1byte=8bits
1KB=1024byte
1MB=1024KB
1GB=1024MB
2. 二进制 binary
八进制 octal
十进制 decimal
十六进制 hex
3. 字符:是各种文字和符号的总称,包括各个国家的文字,标点符号,图形符号,数字等。
字符集:字符集是多个符号的集合,每个字符集包含的字符个数不同。
字符编码:字符集只是规定了有哪些字符,而最终决定采用哪些字符,每一个字符用多少字节表示等问题,则是由编码来决定的。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。
二. 常见字符集的编码介绍:
常见的字符集有:ASCII 字符集,GB2312字符集,BIG5字符集,GB18030字符集,Unicode 字符集,下面一一介绍:
1. ASCII 字符集:
定义:
美国信息互换标准代码,是基于罗马字母表的一套电脑编码系统,主要显
示英语和一些西欧语言,是现今最通用的单字节编码系统。
包含内容:
控制字符(回车键,退格,换行键等)
可显示字符(英文大小写,阿拉伯数字,西文符号)
扩展字符集(表格符号,计算符号,希腊字母,拉丁符号)
编码方式:
第0-31号及127号是控制字符或通讯专用字符;
第32-126号是字符,其中48-57号为0-9十个阿拉伯数字,65-90号为26
个大写英文字母,97-122号为26个英文小写字母,其余为一些标点符号,
运算符号等。
在计算机存储单元中,一个ASCII 码值占一个字节(8个二进制位),最高
位是用作奇偶检验位。【奇偶校验是指:在代码传送的过程中,用来检验
是否出错的一种方法。】奇偶校验分为奇校验和偶校验。奇校验规定:正
确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位添1;
偶校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则
在最高位添1。
2. GB2312字符集:
定义:
信息交换用汉字编码字符集。是中国国家标准的简体中文字符集,它所收
录的汉字已经覆盖99.75%的使用频率,在中国大陆和新加坡广泛使用。
包含内容:
GB2312收录了简化汉字及一般字符,序号,数字,拉丁字母,日文假名,
希腊字母,俄文字母,汉语拼音符号,汉语注音字母,共7445个图形字
符。其中包括6763个汉字,一级汉字3755个,二级汉字3008个。
编码方式:
GB2312对所收汉字进行了“分区”处理,每区含有94个汉字或者符号,
这种表示方法也叫做“区位码”。
它是用双字节表示的,前面的字节为第一字节,又称“高字节”,后面的
为第二字节,“低字节”。
高位字节,把01-87区的区号加上0xA0(相当于数字160);低位字节把
01-94区的区号加上0xA0(相当于数字160)。
举个简单的小例子:第一个汉字——“啊”,它的区号为16,位号01,则
区位码是1601。则高字节位:16+0xA0=0xB0;低字节位:01+0xA0=0xA1,
所以“啊”的汉字处理编码为0xB0A1。
3. GBK 字符集:
定义:
GBK 是GB2312字符集的扩展(K ),它收录了21886个符号,它分为汉字
区和图形符号区,汉字区包括21003个字符。GBK 字符集主要扩展了繁体
中文字的支持。
4. BIG5字符集:
定义:
又称大五码,由台湾五家软件公司创立。因为当时台湾没有一个标准的字
符集,而且GB2312又没有收录繁体字,所以才推出了BIG5。
包含内容:
BIG5字符集共收录了13053个中文字,该字符集在台湾使用。但是没有
考虑到社会上流通的人名,地方用字,方言用字,化学及生物科等用字,
没有包含日文平假名及片假字母。
编码方式:
BIG5也采用双字节存储方法,一两个字节编码一个字。高位字节的编码
范围是0xA1-0xF9, 低位字节的编码范围是0xA1-0xFE 。
5. GB18030字符集:
定义:
GB18030字符集标准解决汉字,日文假名,朝鲜语和中国少数民族文字组
成的大字符集计算机编码问题。
包含内容:
该标准的字符总编码空间超过150万个编码位,收录了27484个汉字,
覆盖中文,日文,朝鲜语和中国少数民族文字。满足中国大陆,香港,台
湾,日本和韩国等东南亚地区信息交换多文种,大字量,多用途,统一编
码格式的要求。
编码方式:
GB8030标准采用单字节,双字节和四字节三种方式对字符编码。
单字节部分使用0x00-0x7F 码(对应于ASCII 码的相应码);
双字节部分,首字节码从0x81-0xFE, 尾字节码分别是0x40-0x7E 和
0x80-0xFE 。
四字节部分采用0x30-0x39作为双字节编码扩充的后缀,这样扩充的四字
节编码,其范围是0x81308130-0x0xFE39FE39, 其中第一,三个字节编码位
均为0x81-0xFE ,第二,四个为0x30-0x39。
6. Unicode 字符集:
定义:
University multiple-object coded character set(通用多八位编码字符集),
支持世界上超过650种语言的国际字符。Unicode 允许在同一服务器上混
合使用不同语言,它为每种语言的每个字符设定了统一并且唯一的二进制
编码,以满足跨平台,跨语言进行文本转换,处理的要求。
编码方式:
Unicode 标准始终使用十六进制数字,固定使用2个字节来表示一个字符,
共可以表示65536个字符。而且书写时在前面加上前缀“U+”,例如A 的
编码是004116,则书写成“U+0041”。
Unicode 字符集包含的编码方案:
● UTF-8:
UTF8是unicode 其中的一个使用方式。UTF 的意思是:unicode
translation format,即把unicode 转作某种格式的意思。
UTF-8使用可变长度字节来存储unicode 字符,如ASCII 字母还是采用
一个字符来存储,希腊字母等采用2个字符来存储,而常用的汉字要
使用3字节,辅助平面字符则使用4字节。
● UTF-16:
使用一个或两个未分配的16位代码单元的序列对unicode 代码点进
行编码,即2个字节表示一个字符。
● UTF-32:
将每一个unicode 代码点表示为相同值的32位整数。
● 关于unicode 编码的一个问题:
使用记事本另存为时,可以在ANSI ,GBK,Unicode ,unicode big endian
和UTF-8这几种编码之间相互转换。同样是txt 文件,windows 是怎
么识别编码的呢?
答:平时注意的话可以发现Unicode ,unicode big endian和UTF-8编
码的txt 文件的开头会多出几个字节,分别是(FF,FE),(FE,FF ),
(EF,BB,BF )。那么这些标记都是基于什么标准呢?
ANSI 字符集:ASCII 字符集,以及由此派生并兼容的字符集。
UTF-16与UTF-8:如“连通”两个字,在UTF-16中为:DE 8F 1A 90,
两个字节决定一个汉字;在UTF-8中则为:E8 BF 9E E9 80 9A,即3
个字节决定一个字符。
当一个软件打开一个文本时,首先是要决定这个文本究竟是使用哪种
字符集的哪种编码保存的,软件一般采用三种方式来决定文本的字符
集和编码:检测文件头标识,提示用户选择,根据一定的规则猜测。
不同编码方式的开头字节如下:
EF BB BF UTF-8
FF FE UTF-16,little endian
FE FF UTF-16,big endian
FF FE 00 00 UTF-32, little endian
00 00 FE FF UTF-32,big endian
注:endian 是指字节序,big endian(大尾)和little endian(小尾)
是CPU 处理多字节数的不同方式。例如“汉”的unicode 编码是6C49,
写到文件中,如果将6C 写在前面就是big endian,将49写在前面就
是little endian。
7.总结:
从ASCII ,GB2312,GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一的处理。区分中文编码的方法是高字节的最高位不为0。
计算机使用的缺省编码方式就是计算机的内码。有的中文windows 的缺省内码还是GBK ,可以通过GB18030升级包升级到GB1030。不过相对GBK 新增的字符,普通人很难用到的,通常我们用GBK 来指代中文windows 内码。
GB2312的原文是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。