复制这句话,在这句话后面打字是反的哟!--记录一次关于字符编码的趣事

正要如昨日一样思考人生时

朋友给我发了一句话

很奇怪,在前几个月的时候看到这些理都不理的我,这次想都没想就复制下来了

正以为要被嘲笑的时候,好玩的事情发了

真的可以!

当然热爱学习的我对于这神奇的事一定会搞清楚这咋整的

史诗级的BGM在我内心响起

我如龙腾飞般积蓄力量,我!!

翻了个身...

接着用最快的速度在手机上打出

正要被自己热爱学习的心打动时(骄傲脸)

对方回复了..

THE END...

既然不能白嫖就自己找答案吧

可以发现这句话后面是有一小段空白的(一开始以为就是中文感叹号的原因,但按删除发现要删两次),那么这里可能就是关键

手机不会调试,

那就复制到电脑看看,

在按保存的时候提示我

含有Unicode格式的字符!!

---------------------------------------------------------------------------------------------------------------------------------------

补充:在计算机也就是电脑不局限于数学计算,而应用于更多的信息交互后,程序员们就得考虑一个问题

就是如何让电脑认识和存储我们语言,因为一开始电脑是由美国人发明的,所以他们只用考虑英文的事情,

由此而生的就是ascii编码,简单来说就是用一个唯一的数字(码点)来确定一个字符

如下图,右边的就是字母与一些常用符号,这些字符左边的10进制(再转二进制后)就是给机器识别的

这样就解决了人与机器的交流问题了

而左边的控制字符,它们并没有特定的图形显示,是对计算机做特定操作的

左边的字符(0~31)加上十进制127对应的字符一共33个

右边的常见可打印字符从32~126一共94个

一共127个也就是7位二进制,这就是最初的ascii编码长度也就是标准ascii(编码范围为:0000 0000~0111 1111)

有人问了,ai那你这就7位都写死了对应这些字符,那我到时想要用别的字符,那机器不就识别不了了?

设计者:那这样吧,那就再给你一位,也就是二进制的首位,这样多了128位用于扩展

又有人问了:那其它国家的语言呢?

 

...

随着电脑的风靡全球,这个适应其他国家的语言问题也就不可避免了

然后Unicode就出现了,由 16 位(二进制)组成提供了 65,536 个字符的空间。

当时人们认为这已经大到足够编码世界上现代文本里所有的文字和字符了。

后来,考虑到要编码历史上的文字以及一些很少使用的日本汉字和中国汉字,Unicode 编码扩展到了 21 位

简单来说,Unicode就是一个统一编码标准,

各国人要想电脑能识别自己的语言,

就按照Unicode的规定把自己的语言编码后收录进去

这样就解决了计算机对于不同语言的一个适应了

再补充一小点,和Unicode同一时期出现的另一个标准还有由ISO(国际标准化组织)的ISO 10646

(XeroxApple等软件制造商于1988年组成的Unicode联盟----Unicode就是他们的一个项目)

当两家发现对方做了同样的事,而且都初具规模了(以下纯属娱乐)

ISO:以我的为标准!

Unicode联盟:凭啥,以我的!!

ISO和Unicode联盟:算了,两套一起加进去不就得了

电脑:

(以上纯属娱乐)

最后到1991年前后,两个项目的参与者都认识到,世界不需要两个不兼容的字符集。于是,它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作

也就是各自的标准对于字符的唯一数字(码点)是相同的

不过因为字符编码这工作实在太庞大而且复杂,每个国家都有不同的语言文化,这些文化特色其它国家的人了解都难.又怎么进行对这些文字编码呢(字符编码不单只是把文字转为数字,而是要考虑其文字所包含的含义等等复杂的工作啊,这里就不讲了我也不清楚)

所以每个国家都有自己的字符集来收录自己的文字,而常用的字符就会与Unicode对接

(常用的字符一般都被Unicode收录了,对接是要和Unicode统一而避免出现重复编码)

比如我们国家的GBK

这样不至于我要用中文时换GBK,用英文又换Unicode了

---------------------------------------------------------------------------------------------------------------------------------------

提前补充:ANSI是微软系统对于各个字符集,也就是每个国家字符编码做一个二次映射,就是用数字对应各国的字符集

在cmd命令下可以查看当前系统所使用的字符集

对应得字符集就是(https://baike.baidu.com/item/codepage/416287?fr=aladdin)

回接上文

我们知道windows记事本默认是ANSI编码格式的,所以照常是不会提醒的,

 

那么关键就是这unicode的字符了,可我们也没看到啥奇怪的符号啊

那么就是看不见的东西再作怪了

回想下上面讲ascii的时候,讲到的控制字符就是不可见的,

那么可以怀疑就是Unicode的控制字符在作怪了

谷ge..度娘一波后,发现

哇哦!!!

其实在记事本里是有显示Unicode控制字符的

点开后可以发现

我们的光标中有个小小奇怪的符号

而这符号就是Unicode控制字符的RLO,是用来适应个别国家书写文字的顺序是从右到左的

到这问题基本解决啦,真是有趣,而且对于这些让计算机更懂我们人类的前辈们的更加的崇敬了(比💗)

 

那这时又有人问:那为啥手机上微信也可以这样呢?

答:其实不止微信,在手机任何能输入字符的地方都是可以的,这是因为手机默认的字符编码是UTF-8.

而UTF-8就是Unicode的一个灵活的编码方式,也就是说所有手机都是支持Unicode的,所以这操作字符当然也有效啦

下面是一些对于这RLO的一些扩展知识:

RLO只是看起来是右往左的,

但是我们复制出来后

对于我们是正常顺序的,不仅如此对于计算机识别来说也是没区别的

小知识一:所以就有一个安全问题,

就是我们可以构造一个看起来是正常格式,但实际是一个应用程序或者脚本的文件

这样仔细看还是能看出来,但是别有用心的人肯定还有别的方式来掩盖的

当然这只能欺骗我们的眼睛,电脑是可以识别出来的,杀毒软件更不用说了(杀毒软件一定要必备啊)

小知识二:

如果你在网上需要给别人留邮箱地址时,就是填完邮箱后还要补一句楼主一生平安的时候啊emm,可以试试这个方法

在记事本里插入RLO操作字符后反向输入邮箱

这样浏览器的搜索引擎和一些爬虫爬到你的留言里的邮箱时就是倒序的,它们很容易就因为出现格式错误而无法爬取和收录啦

以上知识点来源于:

https://objccn.io/issue-9-1/(NSString 与 Unicode)

http://www.divcss5.com/html/h53.shtml(UTF-8 GBK UTF8 GB2312之间的区别和关系)

维基百科

百度百科和百度回答

-----------------------------------------------------------------我是分割线--------------------------------------------------------------

看完了觉得不错就点个赞或者评论下吧,感谢!!!

如果本文哪里有误随时可以提出了,收到会尽快更正的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值