浅谈一直被我忽略的编码问题

今天在学习廖雪峰老师的python教程的时候,偶然发现了关于编码问题非常详尽的说明,个人觉得非常有用,大概把我自己读到的理解到的东西记录下来,供以后自己或者有需要的朋友们交流学习吧。

在大概四年前开始接触网站编程,一开始写html的时候就听老师常说中文网站为了避免浏览器解析异常出现乱码等情况,要声明编码类型,中文编码一般有GB2312和UTF-8这两种可以选,然后印象中UTF-8兼容性很高,不只是中文还可以正常显示其他很多国家的文字的样子,然后一般自己做的网站声明都写的是UTF-8,虽然当时的自己并不知道原理但至少用起来没多大问题。

在平时写后台的时候一般遇到需要编码处理的情况大概就是字符串的排序,这时候要么直接找个库接进去,要么转拼音然后用ASCII编码来排序,从来没有考虑过如果要对中文直接进行排序会需要怎么来做的问题。虽然也许真的一辈子都用不到,但谁说得清呢,有备无患吧~

首先说的是ASCII的作用。首先,计算机是只能处理数字的,字符型的文字信息计算机在处理的时候会先转化成数字来处理。发明计算机的美国人为了他们的使用方便给26个英文字母包含大小写都编排了不同的数字编码,计算机在遇到这些字母的时候就知道哪个字母对应哪个数字就可以进行处理了。这就是ASCII编码大概的工作模式。

只是全世界的人都要使用计算机,全世界那么多种不同的语言文字就导致单一的ASCII编码无法进行兼容,所以每个国家按照自己的需要创造了自己专属的编码规则,比如中国的GB2312,日本的Shift_JIS之类的。在使用特定的编码的时候计算机就能准确的找到一个特定的字符所应该对应的数字编码。

这样的编码环境下,大多数日常的工作基本都能满足了,但偶尔还是会存在多语言混写的情况,比如在一个页面上既要显示中文又要有日文,这样一来同样造成了存在计算机无法识别的字符类型导致乱码,于是Unicode应运而生。

Unicode编码将几乎所有的语言都糅合到一套标准编码里面,经过不断的发展已经十分成熟了,最常用的文字类型基本可以实现两个字节对应一个字符,并且极大多数的编程语言和编译解释环境都能支持Unicode编码。只是Unicode编码存在一点问题,比如说,字母‘A’,在ASCII编码下对应的是01000001,而在Unicode编码里面对应的是00000000 01000001。你会发现,对应的数值其实是一样的,但是在Unicode编码中,用一串的0作为占位,因为它需要两个字节。这就导致一段英文、数字、基本的字符,在储存的时候比它真正需要的储存空间多出了一倍,这多出来的部分仅仅是被毫无意义的0所占用的。

为了节省这部分浪费的空间,人们就想了,是不是可以在编码的时候节省下这部分的空间占用,将毫无意义的字节去掉。于是就有了UTF-8编码。相对于Unicode编码来说,UTF-8更像是一种“可变长度的编码类型”,并且在编码上能完美的兼容ASCII(不像是Unicode那样会有一串无效的占位0),所以在所有能够使用ASCII的环境下,都可以使用UTF-8。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值