从ASCII聊起

原创 2017年09月04日 15:17:39

在互联网的世界,端与端之间传递的报文都是未经过编码的字节流,每8位组成1个字节,计算机以二进制为基础,这是由于使用晶体管的开合状态表示1和0,这样8个电晶体管就可以组成一个字节,这正是应用层使用的最小单位——字节。

在通过Socket进行网络通信的程序中,假如我们在接收到报文时不知道通过什么编码才能正确解码,最好的办法就是用Socket读取字节流,在确认编码后再对这些字节流进行转码,否则产生解码错误。我们常见的编码有ASCII、GB2312、UNICODE、UTF-8等等,除此之外还有很多其他编码,为什么会有这么多不同的编码?

ASCII编码即American Standard Code for Information Interchange,作为美国标准信息交换编码,并且计算机刚开始只在美国流行,所以当时所有的计算机都使用ASCII编码,ASCII编码是由8比特组成,从0到127分别用于表示不同的字符,包括各种符号、英语字母、阿拉伯数字等,由于128种字符只需7位即可完成编码,所以最高位被0填充。这128个字符已经完全满足使用英语的美国人,英语单词可以通过拆分成字母后用ASCII码表示。

后来随着计算机的迅速发展,其他国家相继引入计算机,他们发现这些编码根本不够对他们本国文字编码,ASCII码一共8位,最多也只能表示256个字符,于是他们对最高位做文章,其中0-127已经被美国使用并成为标准,为了兼容考虑肯定不能改动,剩下128-255可供使用,但很快剩下的128个编码又被用完,现在唯一能做的就是使用两个甚至更多个字节来表示一个字符,每个国家都有自己的规定,于是中国编制了GB2312编码,为了兼容ASCII,它规定一个字节如果小于等于127则表示ASCII,如果两个大于127的字节连在一起则表示汉字,而且两个字节的值都在一定的范围内。经过一轮扩展后已经基本解决汉字编码不足问题。

再后来很多国家都按自己规定给自己的文字编码,对其他国家的编码一概不认识,情况一度混乱。接着国际标准化组织推出UNICODE编码,它要把全世界所有文字符号都包括进来,使用两个字节16位对所有字符进行编码,同时为了保证兼容ASCII码,低七位仍用于表示ASCII码原来的字符。通过UNICODE确实是把世界所有字符都统一起来了。

UNICODE编码虽然统一了所有字符,但还存在一个问题,如果是英文字符其实用一个字节已经足够,但使用UNICODE却必须要搭上另外一个毫无意义的字节,在网络传输过程中则意味着要多传输一倍无用的报文。于是引入UTF-8编码,它属于UNICODE的一种实现,它是一种变长的编码方式,在UTF-8规定的实现下可以用一个字节表示ASCII码表示的所有字符,避免了多余的空间浪费。

除了上面几种常见的编码,还有很多其他编码,不同编码指定的规则也不同,但基本都对ASCII做了兼容处理,可以说ASCII是最基础的。

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

欢迎关注:

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

从如何获取可信赖的ip地址聊起

原文:http://www.l4zy.com/posts/how-to-get-real-ip-address.html 起因 写这篇文章缘起SF的一个问题 http://segmentfau...

从太原马拉松未中签聊起

前言 突然发现我好久没更新CSDN博客上的文章了,说来有些惭愧。最近一段时间,我除了工作日在公司上班,业余时间都留给了跑步。思来想去,我还是从最近发生在我身上的一件“大事”说去吧!   将时间定...

从Python的exec()聊起

python exec

从如何获取可信赖的ip地址聊起

原文:http://www.l4zy.com/posts/how-to-get-real-ip-address.html 起因 写这篇文章缘起SF的一个问题 http://segmentfault...

大道行思 - 从中国的大国崛起和近年来的天顶星科技聊起

http://bbs.tianya.cn/post-worldlook-674696-1.shtml#ty_vip_look[%E7%BF%9F%E7%86%99%E6%99%A8]   一、中国重...

小议技术领域的精分化——从《找你妹》背后的游戏云聊起

Let‘s Find It 是海外版找你妹,本文浅谈Let's Find It 的技术架构,而这款游戏则是“游戏云”的试点Demo,专为游戏开发爱好者开发的后台的自动运维SAAS 同时,也讨论了中国各...

当我们聊起中医的时候都会聊什么?

开始中医话题之前,我们还得先做一个准备工作:去道德化。   我们必须要承认,中华民族是世界众多民族中普通的一员,中华民族不可能天生正义和正确。中华民族的老祖宗,也是人,他们不可能不犯错,这并不是一个...

从京东的故事聊起

第一次听说京东还是在大学的时候,那时候我想网购个手机,大家也知道在淘宝上买东西有时候还得拼RP,大学那时候没啥闲钱也就很少去网购,就向一个网购经验比较丰富的同学问问,才知道有京东这个名字。从那以后,渐...

asm基础——汇编指令之ascii调整指令

asm基础——汇编指令之ascii调整指令

BCD与ASCII码互转-C语言实现

BCD与ASCII码互转-C语言实现
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从ASCII聊起
举报原因:
原因补充:

(最多只允许输入30个字)