在较早的计算时代,ASCII 代码用于表示字符。英语只有 26 个字母和一些其他特殊字符和符号。
下表是 ASCII 码对照表,包含字符及其相应的十进制和十六进制值。
ASCII 码对照表
从上表可以推断出,ASCII 值可以在十进制数系统中表示为 0 到 127。让我们看看 0 和 127 在 8 位字节中的二进制表示。
0 表示为
0 的二进制表示
127表示为
127 二进制表示
从上面的二进制表示可以推断,十进制值 0 到 127 可以使用 7 位来表示,而第 8 位是空闲的。
警告 从这个地方起,混乱开始了。
人们想出了不同的方法来使用剩余的第八位,从而使其可以表示从 128 到 255 的十进制值。那么冲突就发生了。例如,越南人使用十进制值 182 来表示越南字母 ờ,而印度人使用相同的值 182 来表示印地语字母घ。因此,如果印度人写的电子邮件包含字母घ并且它被越南人阅读,那么将会显示为ờ。显然这不是预期的效果。
那么如何解决这个问题呢,接下来就该 Unicode 出场了。
Unicode 字符集将世界上的每个字符都映射到一个唯一的数字上。这确保了不同语言的字母之间没有冲突。这些数字与平台无关。
这些唯一的数字在 unicode 术语中称为代码点。
让我们看看它们是如何被引用的。
使用代码点引用 拉丁字符ṍ
U+1E4D
U+ 表示 unicode,1E4D是分配给字符 ṍ 的十六进制值。
英文字母A表示为 U+0041
好了,了解了这些,接下来该是重头戏了
现在我们知道什么是 unicode 以及如何将世界上的每个字母分配给一个唯一的代码点,我们需要一种在计算机内存中表示这些代码点的方法。这就是字符编码登场的地方。 其中最为人们所熟知的就是 UTF-8 编码。
UTF-8 编码是一种大小可变的编码方案,用于表示内存中的 unicode 代码点。大小可变编码意味着代码点根据其大小使用 1、2、3 或 4 个字节表示。
1个字节编码的标识是第一个比特位为0。
UTF8 1字节编码表示方式
英文字母A的 unicode 代码点为 U+0041。它的二进制表示是1000001。
A 以 UTF-8 编码表示为
01000001
红色的0位表示使用1字节编码,其余位代表码位
代码点为 U+00F1 的拉丁字母ñ的二进制值11110001。该值大于可以使用 1 字节编码格式表示的最大值,因此该字母表将使用 UTF-8 2 字节编码表示。
2 字节编码的方式是由第一个字节比特位中的高三位的比特序列110和第二个字节比特位中的高二位的比特序列10来标识。
UTF8 2字节编码方式表示
Unicode 代码点U+00F1的二进制值是1111 0001。用2字节编码格式填充这些位,我们得到如下所示的ñ的UTF-8 2字节编码表示。
填充是从映射到第二个字节的最低有效位的代码点的最低有效位开始完成的。
1100001110110001
蓝色的二进制数字11110001代表码位U+00F1的二进制值,红色的是2字节编码标识符。黑色零用于填充字节中的空位。
具有代码点U+1E4D的拉丁字符ṍ使用 3 字节编码表示,因为它大于使用 2 字节编码可以表示的最大值。
3 字节编码通过第一个字节中的位序列1110 和第二个和第三个字节中的 10的存在来标识。
UTF8 3字节编码表示
ṍ 十六进制代码点 0x1E4D,对应的二进制值为1111001001101。将这些位填充到上述编码格式中,我们得到了下面所示的 ṍ 的UTF-8 3 字节编码表示。
填充是从映射到第三个字节的最低有效位的代码点的最低有效位开始进行的。
111000011011100110001101
红色位表示 3 字节编码,黑色位是填充位,蓝色位表示代码点。
表情符号的Unicode代码点U+1F62D。这大于可以使用 3 字节编码表示的最大值,因此将使用 4 字节编码表示。
4 字节编码通过第一个字节中的11110和随后的第二个、第三个和第四个字节中的10来标识。
UTF8 4字节编码表示
U+1F62D的二进制表示是11111011000101101。将这些位填入上述编码格式,我们就得到了的UTF-8 4字节编码。代码点的最低有效位映射到第四个字节的最低有效位,依此类推。
11110000100111111001100010101101
红色位标识4字节编码格式,蓝色位是实际码位,黑色位是填充位。
上面我们分别对 UTF-8 的几种编码方式进行了详细的介绍。接下来我们顺带介绍一下 UTF-16 和 UTF-32 编码方式
UTF-16 编码是一种可变字节编码方案,它使用 2 个字节或 4 个字节来表示 unicode 代码点。所有现代语言的大多数字符都使用 2 个字节表示。
拉丁字母ñ的Unicode代码点为 U+00F1 二进制表示为 11110001 。其 UTF-16 编码表示为
0000000011110001
上面的表示是在 Big Endian 字节顺序模式下(最高有效位在前)。
UTF-32 编码是一种固定字节编码方案,它使用 4 个字节来表示所有代码点。
英文字母 A 具有 Unicode 代码点 U+0041。它的二进制表示是 1000001。
它以UTF-32编码表示,如下所示,
00000000 00000000 00000000 01000001
蓝色位是代码点的二进制表示。上面的表示是在 Big Endian 字节顺序模式下。
以上就是关于字符集和字符编码的所有内容。
问:卡牌大师游戏闪退怎么解决?答:游戏闪退无非就是内存不足的问题,通常情况下,内存不足就会出现游戏闪退。这个时候将不用的程序清理掉,就可以玩了。当然也会出现因游戏文件包损坏,导致游戏闪退弹出。这种情况一般都是非法安装外挂和辅助造成的,所以建议大家不要用辅助等类型的第三方软件。以上就是常见的二种现象,
2024-11-22 10:29:28
炸麻叶儿是我们北方的传统特色小吃,小时候逢年过节、家家户户都会预备一些,焦香酥脆、越嚼越香,可是那时候最好的零食。现在生活条件好了,各式各样的零食应接不暇,眼看着这些传统的、经典的小吃逐渐淡出了大家的视野,着实觉得有些可惜。今天,我就把这款地道的、河南特有的、酥的直掉渣的炸麻叶做法,再给大家分享一遍
2024-11-22 09:35:04
最近发现,越来越多的人开始喜欢机械手表了。相比石英手表,机械手表虽然更贵,但是也更有质感和品味,也是不争的事实。相信很多越来越喜欢机械表的人都是认定了这个理儿。其实,我们常听说的一些大牌钟表,都是以机械手表见长,甚至有不少大牌手表都没有石英手表,比如朗格、宝玑等。论知名度和影响力,以下这些机械手表比
2024-11-22 09:19:48
用料青辣椒一根 红萝卜一根 生芒果一颗 盐渍话梅3粒切丝 日本话梅片6片切丝 备用 柠檬汁适量 矿泉水适量 少许盐 糖 太太乐鸡汁适量调一个咸鲜口 好了… 做法步骤1、买一个芒果准备学做牛肉芒果条菜的…2、切开一看 哇~生的 …3、只能改菜了 凉拌吧 红萝卜切丝 青椒切丝 盐渍话梅切丝(切出来成粒了
2024-11-22 09:04:05
传说东汉刘秀在未登大宝前有过一段很落魄的日子,亏得一位农村老汉割了一种野菜给刘秀充饥,刘秀吃后觉得甚是美味,便给野菜起了“救菜”的名字。此菜就是现在的韭菜,古语有云:“春初早韭,秋末晚菘”,意思是初春时刻,在经历过一个寒冬的缓慢生长后,是韭菜最为鲜嫩完美的一段时间,晚秋次之,夏天味道最差,所以各位碰
2024-11-22 08:49:26
今天来跟大家分享一个洋葱肉丸汤的做法,这样做出来的肉丸子非常好吃,比较鲜嫩,一点也不柴,爽滑可口,而且汤汁喝起来特别鲜美,光看着就让人特别有食欲,而且它的营养特别丰富。这道洋葱肉丸汤的做法是比较简单的,很容易就能够做出来,非常适合在夏天食用。如果家里有小朋友,那么经常给它吃这样的洋葱肉丸汤,可以起到
2024-11-22 08:34:03