字符集_什么是字符集和编码?

点击上方蓝字设为星标3ca5e3c5a1895a8e5c0f1314dfa390e9.png

每周一、三、五上午 8:30 准时推送

下面开始今天的学习~

da2d38d00de1972c2b534e14ccbebe07.png

a2686a600fc20f6b7b8e1860e8b79315.png

在介绍字符集和编码之前,我们需要明确几个概念,第一个概念非常简单,那就是——计算机中存储的信息都是二进制存储的。所以无论我们需要存放和读取什么内容,最终都是以二进制存储的,但是我们的存放的内容可能有多种不同的格式(图片,文本,视频等),本文将从文本在计算机中的存取为例,帮助大家快速第理解一下字符集,编码以及相关的“玄学”内容。

f7090775d0cbe49f70c174ae0b745767.png

在互联网初期,各大字符集如同编程语言一样希望一统天下,在 2000 年 ~ 2012 年阶段,各大字符集对于互联网的占领情况如下图所示:

1c9d691759bb9a899532f1e940044f9a.png

关于字符编码集,我们脑中会出现的概念有——UTF-8,ASCII 等,但是如果细问这些概念之间有什么关系的话,想必许多人都无法正确地区分清楚。

以对称加密算法作为例子,编码可以理解为加密,解码可以理解为解密,我们常见的文本(就比如你现在在看的这篇文章),可以理解为密码学中的明文,在存放的过程中,通过一种方式把它“加密”为计算机可以阅读的形式,一般来说,这里的“加密算法”就是我们要讲到的字符编码。

如果编码和解码的方法不一样的话,对于我们表现出来的形式就是“乱码”,用一个生活中的例子来比喻就是,一个英国人为了表示祝福在纸上写了 bless(编码过程,祝福->bless)。而一个法国人拿到了这张纸,由于在法语中 bless 表示受伤的意思,所以认为他想表达的是受伤(解码过程,bless->受伤)。

a0775cd6a851e3ffc22dca4792b0e8e4.png

字符的集合就叫字符集,定义字符集中的字符如何编码为特定的二进制数,以便在计算机中存储。字符集和字符编码一般一一对应,但是大家经常听到的 Unicode 和 UTF-8 就是一个例外,Unicode 是字符集,UTF-8 是 Unicode 的一个实现。

在实际的编程中,我们经常需要在各个字符集之间转换,但是往往由于缺乏对目前正在处理的字符的了解,而产生各类的问题。

f891f1c8c930a1e4dd8f6e7fef28cf4e.png

简单起见,我们快速认识一下一些常见名称对应的概念(感兴趣的同学可以根据上图进行更为详细的了解):

  • ASCII 码是一个字符集,同时它的实现也只有一种,因此它也可以指代这个字符集对应的字符编码

  • GB18030 是一个字符集,主要是中国人为了解决中文而发明制定的,由于它的实现也只有一种,所以它也可以指代这个字符集对应的字符编码

  • Unicode 是一个字符集,为了解决不同字符集码表不一致而推出的,统一了所有字符对应的码,因此在这个规范下,所有字符对应的码都是一致的(统一码),但是统一码只规定了字符与码表的一一对应关系,却没有规定该如何实现,因此这个字符集有多种实现方式(UTF-8,UTF-18,UTF-32),因此这些实现就是对应的字符编码。也就是说,Unicode 统一约定了字符与码表直接一一对应的关系,而 UTF-8 是 Unicode 字符集的一种字符编码实现方式,它规定了字符该如何编码成二进制,存储在计算机中。

这里可能有小伙伴会想到,诶,我们常常听说的 base64 是什么呢?字符集?字符编码?还是加密算法?

其实 base64 是一个编码方式,就是出64个字符(小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符))作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符,所以虽然 base64 编码后的字符串非常像密码,但是它依然不是密码。虽然不能当作密码使用,但是可能对于非科班毕业的同学来说,乍一眼会理解成一个非常复杂的密码,那么这里就有做文章的空间啦~

看完这篇文章,你是否已经大致了解了字符集,编码的概念呢?有兴趣的小伙伴还可以去了解一下字符转换,或者用编码做一张图片去考考你的小伙伴哦~

bc12cf0d793715e6318025cf75579829.png

2d2f3f9b513bf894bc32df5c04987b95.png

本文作者:Nova Kwok

编辑&版式:霍霍

声明:本文归 “力扣” 版权所有,如需转载请联系。

01afc9f261cf520e15862aec64fc5067.gif

5dd35a21fbeec99f26cb7b06be822f12.png

92c0e94e184eba00579bf6610aec9cd9.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值