关于文字的编码

我们知道在计算机中存储的都是0和1的二进制码,那怎么用这些数字来表达我们通常用的字符呢?人们通过编码的方式人为的规定了用特定的数字对应特定的字符。这就是编码。

一、ASCII码

计算机是在欧洲发明的,刚开始就只有欧洲人使用,他们为了在计算机上表示他们常用的字符美国制定了ASCII码表,因为它们的字符比较少(ASCII只包含了128个字符),用0~127(用一个字节的低7位)就能表示完成,每一个数字对应一个字符,比如“A”对应65。它们就用一个字节代表一个字符,最高位统一为零。
二、非ASCII码
随着许许多多的国家离开时使用计算机,在不同的国家可能有着不同的语言。比如,我么那中国人也需要使用计算机啊,我们需要在计算机上用我们的汉字啊,那怎么办呢?我么你的汉子那么多,一个字节只能表示256个显然是不够的,那就需要更多的字节来存储一个汉字了。比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。
在其他的国家同样如此。

三、Unicode

正如上面说的一样,每个国家都使用不同的编码,随着互联网的普及,不同地区的人也有了普遍的资源共享,但是每个地方的编码又不相同,就造成了乱码的现象,为了统一编码,将全世界的字符都编入一个表中,这就是Unicode码,又称为万国码。

四、Unicode的问题

但是将全世界的字符都编入一个表中,数字是相当大的。那这些编码怎么存储呢?那些字符编码在低数字的国家也用多个字节表示的话,那是很浪费内存的。比如,英文字符依然在0~127,使用一个字节就能存储,而汉子却至少需要3个字节存储,那么英文字母也用3个字母存储的话是很浪费内存的,如果不用相同的字节数,在一篇文章中又很难知道它是什么编码。所以我们需要有需要一个统一却又不浪费内存的编码。

五、UTF-8

UTF-8编码方式在互联网上广泛使用,注意它只是Unicode码的一种编码方式。utf-8可以使用1~4个字节表示一个字符,这样及解决了统一的问题有解决了浪费内存的问题。UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
总结如下(字母x表示可用编码的位)
Unicode符号范围 | UTF-8编码方式
(十六进制) |(二进制)
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
如“中”字,在Unicode码中对应0x4e2d,它的UTF-8编码就是:E4 B8 AD,对应的二进制就是1110 0100 1011 1000 1010 1101,根据上面你的规则,对应的Unicode码的二进制就是0100 11 1000 10 1101,这个二进制对应的就是0x4e2d。
Unicode码还有其他的编码方式,这里就不多说了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值