ASCII,GB2312,UNICODE,UTF-8总结
2016-04-09 13:52
176 查看
阅读了一篇关于编码的博客(点击打开链接)后,自己做了如下总结:
ASCII--只有一个字节,后7位为标准,8位为扩展的ASCII码,表示英文字符和一些打印字符,非打印字符等。
ASCII码是直接存储的,也就是说规定哪种字符对应哪种二进制,就把这种二进制原样存储在内存中。
GB2312 ---是对 ASCII 的中文扩展(注意是在ASCII码的基础上进行中文扩展,而不是在扩展的ASCII码基础上)。直接存储方式。
规定把那些127号之后的奇异符号们直接取消掉(也就是取消扩展的ASCII码), 规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了。
中国人民看到这样很不错,于是就把这种汉字方案叫做 “GB2312“。
GBK---把 GB2312 没有用到的码位找出来老实不客气地用上。 后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准。
DBCS---中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做 “DBCS“(Double Byte Charecter Set 双字节字符集)。在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里
UNICODE--Unicode也是一种字符编码方法, 不过它是由国际组织设计, 可以容纳全世界所有语言文
字的编码方案。相当于为世界上每种字符都定义了一个数字来表示。
但是UNICODE虽然给每个字符都定义了一个数字表示,但是直接存储的话可能需要大于1个字节,要将它按照字节存储,
就有两个问题:
1.如何区分单独1个字节表示一个字符还是2个字节表示一个字符还是3个字节
2.英文字母只用一个字节表示就够了, 如果unicode统一规定, 每个符号用三个或四个字节
表示, 那么每个英文字母前都必然有二到三个字节是0, 这对于存储来说是极大的浪费,
文本文件的大小会因此大出二三倍, 这是无法接受的
为了解决这两个问题,出现了UNICODE的不同编码方式,这些编码方式相当于规定了UNICODE码的存储规则,来解决上面两个问题。
UTF-8---UNICODE码的一种,通过给每个字节加10标志位的方式来存储,解决了上面两个问题。
USC-2---(定死两个字节表示一个字符)通常说的UNICODE就是指的USC-2,以小端方式存储
USC-4---(四个字节表示一个字符)
ASCII--只有一个字节,后7位为标准,8位为扩展的ASCII码,表示英文字符和一些打印字符,非打印字符等。
ASCII码是直接存储的,也就是说规定哪种字符对应哪种二进制,就把这种二进制原样存储在内存中。
GB2312 ---是对 ASCII 的中文扩展(注意是在ASCII码的基础上进行中文扩展,而不是在扩展的ASCII码基础上)。直接存储方式。
规定把那些127号之后的奇异符号们直接取消掉(也就是取消扩展的ASCII码), 规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了。
中国人民看到这样很不错,于是就把这种汉字方案叫做 “GB2312“。
GBK---把 GB2312 没有用到的码位找出来老实不客气地用上。 后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准。
DBCS---中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做 “DBCS“(Double Byte Charecter Set 双字节字符集)。在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里
UNICODE--Unicode也是一种字符编码方法, 不过它是由国际组织设计, 可以容纳全世界所有语言文
字的编码方案。相当于为世界上每种字符都定义了一个数字来表示。
但是UNICODE虽然给每个字符都定义了一个数字表示,但是直接存储的话可能需要大于1个字节,要将它按照字节存储,
就有两个问题:
1.如何区分单独1个字节表示一个字符还是2个字节表示一个字符还是3个字节
2.英文字母只用一个字节表示就够了, 如果unicode统一规定, 每个符号用三个或四个字节
表示, 那么每个英文字母前都必然有二到三个字节是0, 这对于存储来说是极大的浪费,
文本文件的大小会因此大出二三倍, 这是无法接受的
为了解决这两个问题,出现了UNICODE的不同编码方式,这些编码方式相当于规定了UNICODE码的存储规则,来解决上面两个问题。
UTF-8---UNICODE码的一种,通过给每个字节加10标志位的方式来存储,解决了上面两个问题。
USC-2---(定死两个字节表示一个字符)通常说的UNICODE就是指的USC-2,以小端方式存储
USC-4---(四个字节表示一个字符)
相关文章推荐
- Linux 与 Windows 对UNICODE 的处理方式
- Unicode详细分析解释
- Perl ASCII 字符判断
- vbs中将GB2312转Unicode的代码
- 将编码从GB2312转成UTF-8的方法汇总(从前台、程序、数据库)
- 程序员趣味读物 谈谈Unicode编码
- 与ASCII码相关的C语言字符串操作函数
- 常用字符集编码详解(ASCII GB2312 GBK GB18030 unicode UTF-8)
- C#实现Json转Unicode的方法
- UTF-8、Unicode 标准化表单、BOM
- ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)第1/2页
- ASP+FSO生成的网页文件默认编码格式以及转换成UTF-8编码方法
- php中json_encode UTF-8中文乱码的更好解决方法
- 浅谈Unicode与JavaScript的发展史
- JavaScript中字符串与Unicode编码互相转换的实现方法
- ASCII
- wampserver 编码设置
- Unicode再探
- utf8编码
- life is short, you need python