什么是Ascii编码?
单字节编码,适用于所有拉丁文字字母.
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符.
标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中:
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;
通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。
它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响
32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
扩展ASCII 字符是从128 到255(0x80-0xff)的字符.扩展ASCII不再是国际标准
什么是DBCS字符集?unicode的由来
中文常用的字符集有GB2312-80,GBK(大陆的中文字符集),Big5(台湾的倚天汉字系统),unicode.
为了解决中国、日本和韩国的象形文字符和ASCII的某种兼容性,开发出双字节字符集(DBCS:double-byte character set)。
DBCS从256代码开始,就像ASCII一样。较高的128个代码中的某些总是跟随着第二个字节。这两个字节一起(称作首字节和跟随字节)定义一个字符,通常是一个复杂的象形文字。
为了解决中文字符的应用,中国定义了一套GB2312的字符集:
字符集规定:127号之后的奇异符号们直接取消掉, 规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,
前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。
在这些编码里,我们还把数学符号、罗马希腊的 字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,
这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了。 中国人民看到这样很不错,于是就把这种汉字方案叫做 “GB2312“。GB2312 是对 ASCII 的中文扩展。
但是中国的汉字太多了,我们很快就就发现有许多人的人名没有办法在这里打出来,特别是某些很会麻烦别人的国家领导人。于是我们不得不继续把 GB2312 没有用到的码位找出来老实不客气地用上。
后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字 符集里的内容。
结果扩展之后的编码方案被称为 GBK 标准,GBK包括了GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。 后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK扩成了 GB18030。
从此之后,中华民族的文化就可以在计算机时代中传承了。 中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做 “DBCS“(Double Byte Charecter Set 双字节字符集)
后来因为很多地区都定义自己的编码字符集合,而且都是重叠的,所以在跨区域通讯向出现了问题. ISO (国际标谁化组织)为了解决这个问题,废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号 的编码!他们打算叫它”Universal Multiple-Octet Coded Character Set”,简称 UCS, 俗称 “unicode“。
unicode编码的形式?UTF-8的由来?
unicode开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符,
对于ASCII里的那些“半角”字符,unicode包持其原编码不变,只是将其长度由原 来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。
由于”半角”英文符号只需要用到低8位,所以其高8位永远是0,因此这种大气的方案在 保存英文文本时会多浪费一倍的空间。
如以下字符编码的unicode 编码(UCS-2):
字符 十六进制编码 二进制编码
I 0049 00000000 01001001
t 0074 00000000 01110100
' 0027 00000000 00100111
s 0073 00000000 01110011
0020 00000000 00100000
知 77e5 01110111 11100101
乎 4e4e 01001110 01001110
日 65e5 01100101 11100101
报 62a5 01100010 10100101
unicode很长一段时间无法推广的原因有两个:
1. unicode 是双字符编码,在网络传输和不同机器上存在大小端的问题;相同的字符集在不同的位置存在几码顺序不同。
2. unicode 1~127的文字符浪费一个字节的空间
为了解决unicode在网络上传输的问题,出现了面向传输的UTF(UCS Transfer Format)标准,UTF-8就是每次8位传输数据,UTF-16就是每次16位数据(先有的UTF-16,但是和unicode一样的问题)。
UTF-8就是在互联网上使用最广的一种u