58

从摩斯密码到 UTF-8

 4 years ago
source link: https://www.tuicool.com/articles/MvEJrym
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在电影《无间道》中,经常会出现摩斯密码的身影。摩斯密码本身的传奇性,为电影增色不少。其实摩斯密码一点也不复杂,反而很简单,透过摩斯密码,我们可以一窥计算机如何表示字符串的奥秘。

AbyUfiI.jpg!web

摩斯密码通过"."(点)和"-"(横)的排列组合来表示相应的字符 。下面是26个字母的摩斯密码表示。

qAjQVfb.jpg!web

一眼看上去,似乎很难发现规律。下面跟着老张,按照由短到长的顺序重新排列组合。

首先来看一个字符的表示,一个点或者一个横仅能表示两个字母,E和T

. E - T

紧接着是两个字符的表示,现在可以表示四个字母了,分别是I、A、N、M

.. I -. N .- A -- M

三个字符的组合可以表示更多的字母。

… S -.. D ..- U -.- K .-. R --. G .-- W --- O

最后,我们用四个字符的组合表示剩下的字母,其中红色的部分为重音字母,略去不表。

.... H -... B ...- V -..- X ..-. F -.-. C ..-- -.-- Y .-.. L --.. Z .-.- --.- Q .--. P ---. .--- J ----

是不是摸到了什么规律? 点和横的数量决定了能表示多少个字母。

点和横的数量 表示字母的数量 1 2 2 4 3 8 4 16

如果我们扩展将点和横的数量扩展到7,那么我们能够表示多少个字符呢?答案是2**7=128。实际上计算机诞生之初,为了便于通信制定了ASCII编码规范。

zqYBfej.jpg!web

但是随着计算机影响力在全球范围内的扩散,ASCII编码已经不能满足表示各种语言的需求了,在这时各语言诞生了各种各样的编码规范,如中文GBK和日语的Shift-JIS。但是各种各样的编码规范阻碍了跨语言交流,这时Unicode应运而生。Unicode编码有不同的具体实现,分别为utf-8、utf-16和utf-32等,其中utf-8占用一到四个字节,utf-16占用二或四个字节,utf-32占用四个字节。以常用的utf-8为例,四个字节即32位已经够大,甚至可以扩展到六个字节,足以涵盖每一种语言。

听完了老张的介绍,是不是恍然大明白? 最后留个作业,欢迎评论区留言。

uQriAzV.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK