认识字符编码

     可能一部人对字符编码不是特别了解,平时用DreamWeaver新建网页页面默认字符编程是GB2312,VS开发工具新建页面默认的字符编码是Utf-8,我们操作系统Windows里面的默认的字符编码是ASCII,这些编码之间有什么区别呢?

 

     计算机中的信息包括数据信息和控制信息,数据信息又可分为数值和非数值信息。非数值信息和控制信息包括了字母、各种控制符号、图形符号等,它们都以二进制编码方式存入计算机并得以处理,这种对字母和符号进行编码的二进制代码称为字符代码(Character Code)。

  计算机中常用的字符编码有ASCII码(美国标准信息交换码)和EBCDIC码(扩展的BCD交换码)。

  ASCII码:美国(国家)信息交换标准(代)码,一种使用7个或8个二进制位进行编码的方案,最多可以给256个字符(包括字母、数字、标点符号、控制字符及其他符号)分配(或指定)数值。

  ASCII码于1968年提出,用于在不同计算机硬件和软件系统中实现数据传输标准化,在大多数的小型机和全部的个人计算机都使用此码。ASCII码划分为两个集合:128个字符的标准ASCII码和附加的128个字符的扩充和ASCII码。比较EBCDIC。其中95个字符可以显示。另外33个不可以显示。 标准ASCII码为7位,扩充为8位。

  常用 ASCII码表

  代码

  字符

  代码

  字符

  代码

  字符

  代码

  字符

  代码

  字符

  32

  52

  4

  72

  H

  92

  /

  112

  p

  33

  !

  53

  5

  73

  I

  93

  ]

  113

  q

  34

  ”

  54

  6

  74

  J

  94

  ^

  114

  r

  35

  #

  55

  7

  75

  K

  95

  _

  115

  s

  36

  $

  56

  8

  76

  L

  96

  `

  116

  t

  37

  %

  57

  9

  77

  M

  97

  a

  117

  u

  38

  &

  58

  :

  78

  N

  98

  b

  118

  v

  39

  ’

  59

  ;

  79

  O

  99

  c

  119

  w

  40

  (

  60

  <

  80

  P

  100

  d

  120

  x

  41

  )

  61

  =

  81

  Q

  101

  e

  121

  y

  42

  *

  62

  >

  82

  R

  102

  f

  122

  z

  43

  +

  63

  ?

  83

  S

  103

  g

  123

  {

  44

  ,

  64

  @

  84

  T

  104

  h

  124

  |

  45

  -

  65

  A

  85

  U

  105

  i

  125

  }

  46

  .

  66

  B

  86

  V

  106

  j

  126

  ~

  47

  /

  67

  C

  87

  W

  107

  k

  48

  0

  68

  D

  88

  X

  108

  l

  49

  1

  69

  E

  89

  Y

  109

  m

  50

  2

  70

  F

  90

  Z

  110

  n

  51

  3

  71

  G

  91

  [

  111

  o

  目前使用最广泛的西文字符集及其编码是 ASCII 字符集和 ASCII 码( ASCII 是 American Standard Code for Information Interchange 的缩写),它同时也被国际标准化组织( International Organization for Standardization, ISO )批准为国际标准。

  基本的 ASCII 字符集共有 128 个字符,其中有 96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有 32 个控制字符。标准 ASCII 码使用 7 个二进位对字符进行编码,对应的 ISO 标准为 ISO646 标准。下表展示了基本 ASCII 字符集及其编码:

  字母和数字的 ASCII 码的记忆是非常简单的。我们只要记住了一个字母或数字的 ASCII 码(例如记住 A 为 65 , 0 的 ASCII 码为 48 ),知道相应的大小写字母之间差 32 ,就可以推算出其余字母、数字的 ASCII 码。

  虽然标准 ASCII 码是 7 位编码,但由于计算机基本处理单位为字节( 1byte = 8bit ),所以一般仍以一个字节来存放一个 ASCII 字符。每一个字节中多余出来的一位(最高位)在计算机内部通常保持为 0 (在数据传输时可用作奇偶校验位)。

  由于标准 ASCII 字符集字符数目有限,在实际应用中往往无法满足要求。为此,国际标准化组织又制定了 ISO2022 标准,它规定了在保持与 ISO646 兼容的前提下将 ASCII 字符集扩充为 8 位代码的统一方法。 ISO 陆续制定了一批适用于不同地区的扩充 ASCII 字符集,每种扩充 ASCII 字符集分别可以扩充 128 个字符,这些扩充字符的编码均为高位为 1 的 8 位代码(即十进制数 128~255 ),称为扩展 ASCII 码。

  通过了解字符的存储编码,可以解决很多由编码不匹配引起的问题,比如网页乱码、邮件乱码,本文简单扼要地阐明了ASCII编码、EBCDIC编码、GB2312编码、Unicode编码、UTF-8编码、以及Base64编码。

  ASCII编码与EBCDIC编码

  在显示器上看见的文字、图片等信息在电脑里面其实并不是我们看见的样子,即使你知道所有信息都存储在硬盘里,把它拆开也看见里面有任何东西,只有些盘片。假设,你用显微镜把盘片放大,会看见盘片表面凹凸不平,凸起的地方被磁化,凹的地方是没有被磁化;凸起的地方代表数字1,凹的地方代表数字0。硬盘只能用0和1来表示所有文字、图片等信息。那么字母”A”在硬盘上是如何存储的呢?可能小张计算机存储字母”A”是1100001,而小王存储字母”A”是11000010,这样双方交换信息时就会误解。比如小张把1100001发送给小王,小王并不认为1100001是字母”A”,可能认为这是字母”X”,于是小王在用记事本访问存储在硬盘上的1100001时,在屏幕上显示的就是字母”X”。也就是说,小张和小王使用了不同的编码表。小张用的编码表是ASCII,ASCII编码表把26个字母都一一的对应到2进制1和0上;小王用的编码表可能是EBCDIC,只不过EBCDIC编码与ASCII编码中的字母和01的对应关系不同。一般地说,开放的操作系统(LINUX 、WINDOWS等)采用ASCII 编码,而大型主机系统(MVS 、OS/390等)采用EBCDIC 编码。在发送数据给对方前,需要事先告知对方自己所使用的编码,或者通过转码,使不同编码方案的两个系统可沟通自如。

  ASCII码使用7位2进制数表示一个字符,这样,7位2进制数可以表示出2的7次方个字符,共128个字符。EBCDIC码使用8位,可以表示出2的8次方个字符,256个字符。

  无论是ASCII码还是EBCDIC码,都无法对拥有几万个的汉字进行编码。因为上面已经提过,7位2进制数最多对应上128个字符,8位最多对应上256个字符。

  GB2312编码

  于是中国的标准化组织就出台了GB2312简体中文编码。GB2312编码用两个字节(8位2进制)表示一个汉字,所以理论上最多可以表示256×256=65536个汉字。但这种编码方式也仅仅在中国行得通,如果您的网页使用的GB2312编码,那么很多外国人在浏览你的网页时就可能无法正常显示,因为其浏览器不支持GB2312编码。当然,中国人在浏览外国网页(比如日文)时,也会出现乱码或无法打开的情况,因为我们的浏览器没有安装日文的编码表。

  Unicode编码

  如上所述,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,不但要知道它的编码方式,还要安装有对应编码表,否则就可能无法读取或出现乱码。为什么电子邮件和网页都经常会出现乱码,就是因为信息的提供者和信息的读取者使用了不同的编码方式。

  如果有一种编码,将世界上所有的符号都纳入其中,无论是英文、日文、还是中文等,大家都使用这个编码表,就不会出现编码不匹配现象。每个符号对应一个唯一的编码,乱码问题就不存在了。这就是Unicode编码。

  Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,“汉”这个字的Unicode编码是U+6C49。

  Unicode固然统一了编码方式,但是它的效率不高,比如UCS-4(Unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。

  UTF-8编码

  为了提高Unicode的编码效率,于是就出现了UTF-8编码。UTF-8可以根据不同的符号自动选择编码的长短。比如英文字母可以只用1个字节就够了。

  UTF-8的编码是这样得出来的,以”汉”这个字为例:

  “汉”字的Unicode编码是U+00006C49,然后把U+00006C49通过UTF-8编码器进行编码,最后输出的UTF-8编码是E6B189。

  Base64编码

  有的电子邮件系统(比如国外信箱)不支持非英文字母(比如汉字)传输,这是历史原因造成的(认为只有美国会使用电子邮件?)。因为一个英文字母使用ASCII编码来存储,占存储器的1个字节(8位),实际上只用了7位2进制来存储,第一位并没有使用,设置为0,所以,这样的系统认为凡是第一位是1的字节都是错误的。而有的编码方案(比如GB2312)不但使用多个字节编码一个字符,并且第一位经常是1,于是邮件系统就把1换成0,这样收到邮件的人就会发现邮件乱码。

  为了能让邮件系统正常的收发信件,就需要把由其他编码存储的符号转换成ASCII码来传输。比如,在一端发送GB2312编码->根据Base64规则->转换成ASCII码,接收端收到ASCII码->根据Base64规则->还原到GB2312编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值