59

从摩斯密码到 UTF-8

 5 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


Recommend

  • 36
    • worktile.com 6 years ago
    • Cache

    RxJS 实现摩斯密码(内附脑图)

    参加 2018 ngChina 开发者大会,特别喜欢 Michael Hladky 奥地利帅哥的 RxJS 分享,现在拿出来好好学习工作坊的内容(工作坊Demo地址),结合这个示例,做了一个改进版本,实现更简洁,逻辑更直观。 一、摩斯密码是什么?

  • 48
    • www.tuicool.com 6 years ago
    • Cache

    Working with UTF-8 in the Kernel

    Benefits for LWN subscribers The primary benefit fromsubscribing to LWN is helping to keep us publishing, but, beyond that, subscribers get immediate access to all site content a...

  • 13
    • blog.codingnow.com 5 years ago
    • Cache

    Windows 下 UTF-16 的坑

    最近帮多个活跃的开源项目改了同一个 bug : 完善 Windows 下的 Unicode 支持。 问题源于 Windows 和其它平台不同,它有悠久的历史包袱。和现代大多数操作系统对 Unicode 支持的共识不同,它的 API 不是基于 UTF-8 而是基于...

  • 29
    • www.tuicool.com 5 years ago
    • Cache

    UTF-8 String Indexing Strategies

    When designing or, in some cases, implementing a programming language with built-in support for Unicode strings, an important decision must be made about how to represent or encode those strings in memory. Not all represe...

  • 55
    • www.tuicool.com 5 years ago
    • Cache

    Go 字符串编码,Unicode 和UTF-8

    1.字符串 字符串在Go语言中以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、 float32、foat64等)一样。 字符串的值为双引号中的内容,可以在Go语言的源码中直接添加非ASCⅡ码字符 Go...

  • 56
    • studygolang.com 5 years ago
    • Cache

    中文转换成html中的utf-8

    在HTML中,中文的“好好学习”可以表示为“好好学习” 在项目中,需要对接短信告警,短信告警返回数据要求是utf8的 后来继续沟通,才发现要的是 html-utf8 的; 没有找到合适的golang工具包,涉及语言转码的...

  • 6

    2021-09-25 08:10 蚂蚁链发布摩斯隐私计算一体机,可无缝链接区块链 巴比特讯,9月25日,蚂蚁链官方宣布,正式发布摩斯隐私计算一体机。摩斯一体机基于蚂蚁链摩斯多方安全计算平台,集成200多项软硬...

  • 9

    使用 C# 製作聲音檔,以摩斯電碼為例-黑暗執行緒 很久沒有 Coding4Fun,想玩個有趣的題目 - 用 C# 無中生有產生聲音檔。 做了研究,.wav 檔用未壓縮的 byte[] 記錄聲音波形,只要依規範在

  • 14

    Msvii 摩斯维 华为mate40系列 手机壳 19元包邮(需用券)-聚超值

  • 4

    用情趣用品在西洋棋比賽裡面傳遞摩斯電碼作弊 標題資訊量有點大... 先講一下最近西洋棋界的新聞,九月的時候

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK