理解字符编码

你有没有想过计算机是如何理解和显示你写的东西的?你有没有想过在进行一些配置时,UTF-8或UTF-16是什么意思?想想计算机应该如何解读“HeLLo WorlD”。 我们都知道计算机以位和字节的形式存储数据。因此,要在屏幕上显示一个字符或将字符映射为计算机内存中的字节,需要有一个标准。阅读以下内容:

null
x48x65x4Cx4Cx6Fx20x57x6Fx72x6Cx44

这是一个记忆会告诉你的东西。如何知道每个内存字节指定的字符?

下面是图片中的字符编码:

如果你还没猜到的话,那就是UTF-8中的“HeLLo WorlD”。是的,我们将继续阅读UTF-8。但让我们从ASCII开始。大多数做过编程或处理字符串的人一定知道什么是ASCII。如果还没有,那么让我们来定义什么是ASCII。 ASCII码: ASCII代表信息交换的美国标准代码。计算机只能理解数字,所以ASCII码是字符的数字表示形式,比如“a”或“@”或某种动作。ASCII是很久以前发展起来的,现在非打印字符很少用于其原始用途。

请看以下内容——

十六进制 十进制的 性格
x48 110 H
x65 145 E
x4c 114 L

等等您可以查看ASCII表,并在 http://www.asciitable.com/ .如果你还没有看过这张桌子,我建议你现在就看!你会发现这是一组简单的英语单词和标点符号。

现在假设我想写以下字符:

A. B@

这将被我的解码器解释为 0x410x0a0x200x420x3f0x40 用十六进制和 065010032066063064 在十进制中,即使是一个空格(0x20)和下一行(0x0a)也有一个字节值或内存空间。

不同的国家,不同的语言,但需要把他们联系在一起

今天,互联网让世界走得更近了。全世界的人不仅仅说英语,对吗?有必要扩大这个空间。如果你已经创建了一个应用程序,并且你看到法国人希望使用它,因为你看到那里有很高的潜力。如果只是在语言上有所改变,但功能相同,不是很好吗?

为什么不为每个人创建一个简单的Unicode通用代码??

所以,Unicode带来了一个非常好的主意。它为每个字符(包括不同的语言)分配了一个唯一的编号,称为代码点。与其他可能的集合相比,Unicode的一个优点是其前256个代码点与ASCII相同。因此,对于软件/浏览器来说,对计算机上使用的大多数现存语言的字符进行编码和解码更容易。它的目标是,而且在很大程度上已经是,所有其他已编码字符集的超集。

Unicode也是一个字符集(不是编码)。它使用与ASCII标准相同的字符,但它使用额外的字符扩展列表,从而为每个字符提供一个代码点。它的目标是包含全世界使用的所有字符(和流行图标)。

在了解这些之前,让我们先了解一些术语 :

  • 字符是具有语义值的文本的最小单位。
  • 字符集是可能被多种语言使用的字符的集合。示例:拉丁字符集用于英语和大多数欧洲语言,而希腊字符集仅用于希腊语言。
  • 编码字符集是一个字符集,其中每个字符对应一个唯一的数字。
  • 编码字符集的代码点是字符集中的任何合法值。
  • 代码单元是一个位序列,用于在给定的编码形式内对指令集的每个字符进行编码。

想知道什么是UTF-8或UTF-16吗??

UTF-8: 自2009年以来,UTF-8一直是万维网的主要字符编码,截至2017年6月,UTF-8占所有网页的89.4%。UTF-8使用一到四个8位字节以Unicode编码1112064个有效代码点。数值较低的代码点往往出现得更频繁,使用较少的字节进行编码。Unicode的前128个字符与ASCII一一对应,使用与ASCII具有相同二进制值的单个八位字节进行编码,因此有效的ASCII文本也是有效的UTF-8编码Unicode。

那么有多少字节可以访问这些编码中的哪些字符呢? UTF-8: 1字节:标准ASCII码 2字节:阿拉伯语、希伯来语、大多数欧洲文字(最显著的是不包括格鲁吉亚语) 3字节:BMP 4字节:所有Unicode字符

UTF-16: 2字节:BMP 4字节:所有Unicode字符

所以我确实提到了BMP。到底是什么?

基本多语言平面(BMP)包含几乎所有现代语言的字符和大量符号。BMP的一个主要目标是支持以前的字符集以及用于书写的字符的统一。

UTF-8、UTF-16和UTF-32是应用Unicode字符表的编码。但它们在编码方式上都略有不同。UTF-8在编码ASCII字符时只使用1字节,输出与任何其他ASCII编码相同。但对于其他字符,它将使用第一位来指示后面将有第二个字节。默认情况下,UTF-16使用16位,但这只能提供65k个可能的字符,这远远不够完整的Unicode集。所以有些字符使用16位值对。UTF-32则相反,它使用了最多的内存(每个字符都是固定的4字节宽),这使得它非常臃肿,但现在在这种情况下,每个字符都有这样精确的长度,因此字符串操作变得简单得多。只需根据字符串的字节长度计算字符串中的字符数。你不能用UTF-8做到这一点。这就是它如何方便地容纳不同语言的整个字符集,并帮助人们将他们的应用程序或信息传播到世界上的方法——只需用他们的语言编码/书写,其余的一切都由解码器负责。

因为这只是进入字符编码世界的开始。我希望这能帮助你在更高的层次上理解字符编码。

本文由 迪帕·班纳吉 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享