码迷,mamicode.com
首页 > 其他好文 > 详细

字符编码入门

时间:2017-12-10 15:53:18      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:就是   应该   组合   orm   byte   www.   字母   占用   数字   

字符编码入门

ASCII

在计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有 01 两种状态,因此八个二进制位就可以组合出 256 种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示 256 种不同的状态,每一个状态对应一个符号,就是 256 个符号,从 0000000011111111

上世纪 60 年代,美国制定了一套字符编码。对英语字符与二进制位之间的关系做了统一规定,这套方案被称作 ASCII 码(American Standard Code for Information Interchange 美国标准信息交换码),一直沿用至今。

ASCII 码一共规定了 128 个字符的编码,如常见的有:

  • 32(二进制 00100000)是空格
  • 48(二进制 00110000)是数字 0
  • 65(二进制 01000001)是字母 A
  • 97(二进制 ?01100001?)是字母 a

这 128 个字符(包括 32 个不能打印出来的控制符号),只占用了一个字节的后面 7 位,最前面的一位统一规定为 0

Unicode

英语用 128 个字符就够了。但是用来表示其他语言,128 个字符是不够的,后来欧洲国家在 ASCII 基础上,利用字节中闲置的最高位编入新的符号,这样一来,这些欧洲国家使用的编码体系可以最多表示 256 个字符。

由于不同国家有不同的字母,因此,即使它们都使用 256 个符号的编码方式,代表的字母却不一样。但是在所有的编码方式中,0-127 表示的符号是相同的,不一样的是128-256这一段。

正因为如此,世界上存在很多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须直到它的编码方式,否则将会出现乱码。

如果有一种编码,将世界上所有的符号都纳入其中,每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是 Unicode(也叫万国码),就像它的名字都表示的,这是一种所有符号的编码。

然而,Unicode 有很严重的问题。由于Unicode只是一个字符集集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该怎么存储。后来,出现了 Unicode 的多种存储方式,也就是说有许多种不同的二进制格式可以用来表示 Unicode 编码,导致 Unicode 编码没有流行起来,直到互联网的出现。

UTF-8

互联网的普及,强烈要求出现一种统一的编码方式,UTF-8 (8-bit Unicode Transformation Format)就是一种互联网上最流行的一种 Unicode 的实现方式。

UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用 1~4 个字节来表示一个符号,根据不同的符号而变化字节长度。

UTF-8 的编码规则很简单,只有两条:

  • 对于单字节的符号,字节的第一位设为 0 ,后面 7 位为这个符号的 Unicode 码。因此对于英语字符,UTF-8 编码和 ASCII 码是相同的。
  • 对于 n 字节的符号(n > 1),第一个字节的前 n 位都设为 1 ,第 n+1 位设为 0 ,后面字节的前两位一律设为 10 。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。

注:在 UTF-8 编码规则中,汉字通常占三个字节,扩展 B 区以后的汉字占四个字节。

总结与扩展

  • GB2312 编码从 ASCII 基础上扩充而来,GBK 从 GB2312 基础上扩充而来,每个汉字占 2 个字节,ASCII 编码规定的字符依然占 1 字节。
  • ISO 组织重新规定了一套包含世界上所有字符的编码方案,叫做 Unicode 字符集(Universal Multiple-Octet Coded Character Set)。
  • Unicode 在网络传输中,出现了 UTF-8 和 UTF-16 两个标准,分别每次传输 8 个位和 16 个位。
  • 因为 UTF-8 等编码体积较大,占电脑空间比较多,所以如果面向的对象大部分是中国人,可以采用 GBK 等编码。
  • ISO-8859-1(= Latin-1 / Latin1)是最早的 8 位字符集,用于支持部分欧洲使用的语言,是在 ASCII 基础上扩充了 96 个字母和符号而来。

参见:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

字符编码入门

标签:就是   应该   组合   orm   byte   www.   字母   占用   数字   

原文地址:http://www.cnblogs.com/dingxr-code/p/8016971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!