在较早的计算时代,ASCII 代码用于表示字符。英语只有 26 个字母和一些其他特殊字符和符号。
下表是 ASCII 码对照表,包含字符及其相应的十进制和十六进制值。
从上表可以推断出,ASCII 值可以在十进制数系统中表示为 0 到 127。让我们看看 0 和 127 在 8 位字节中的二进制表示。
0 表示为
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。
英文字母A的 unicode 代码点为 U+0041。它的二进制表示是1000001。
A 以 UTF-8 编码表示为
红色的0位表示使用1字节编码,其余位代表码位
代码点为 U+00F1 的拉丁字母ñ
的二进制值11110001
。该值大于可以使用 1 字节编码格式表示的最大值,因此该字母表将使用 UTF-8 2 字节编码表示。
2 字节编码的方式是由第一个字节比特位中的高三位的比特序列110和第二个字节比特位中的高二位的比特序列10来标识。
Unicode 代码点U+00F1的二进制值是1111 0001。用2字节编码格式填充这些位,我们得到如下所示的ñ的UTF-8 2字节编码表示。
填充是从映射到第二个字节的最低有效位的代码点的最低有效位开始完成的。
蓝色的二进制数字11110001代表码位U+00F1的二进制值,红色的是2字节编码标识符。黑色零用于填充字节中的空位。
具有代码点U+1E4D的拉丁字符ṍ
使用 3 字节编码表示,因为它大于使用 2 字节编码可以表示的最大值。
3 字节编码通过第一个字节中的位序列1110 和第二个和第三个字节中的 10的存在来标识。
ṍ 十六进制代码点 0x1E4D,对应的二进制值为1111001001101。将这些位填充到上述编码格式中,我们得到了下面所示的 ṍ
的UTF-8 3 字节编码表示。
填充是从映射到第三个字节的最低有效位的代码点的最低有效位开始进行的。
红色位表示 3 字节编码,黑色位是填充位,蓝色位表示代码点。
表情符号😭的Unicode代码点U+1F62D
。这大于可以使用 3 字节编码表示的最大值,因此将使用 4 字节编码表示。
4 字节编码通过第一个字节中的11110和随后的第二个、第三个和第四个字节中的10来标识。
U+1F62D的二进制表示是11111011000101101。将这些位填入上述编码格式,我们就得到了😭的UTF-8 4字节编码。代码点的最低有效位映射到第四个字节的最低有效位,依此类推。
红色位标识4字节编码格式,蓝色位是实际码位,黑色位是填充位。
上面我们分别对 UTF-8 的几种编码方式进行了详细的介绍。接下来我们顺带介绍一下 UTF-16 和 UTF-32 编码方式
UTF-16 编码是一种可变字节编码方案,它使用 2 个字节或 4 个字节来表示 unicode 代码点。所有现代语言的大多数字符都使用 2 个字节表示。
拉丁字母ñ的Unicode代码点为 U+00F1 二进制表示为 11110001 。其 UTF-16 编码表示为
上面的表示是在 Big Endian 字节顺序模式下(最高有效位在前)。
UTF-32 编码是一种固定字节编码方案,它使用 4 个字节来表示所有代码点。
英文字母 A 具有 Unicode 代码点 U+0041。它的二进制表示是 1000001。
它以UTF-32编码表示,如下所示,
蓝色位是代码点的二进制表示。上面的表示是在 Big Endian 字节顺序模式下。
以上就是关于字符集和字符编码的所有内容。
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
发布时间:2023/03/29 浏览次数:68 分类: PHP
本文将教你如何在 PHP 中将图像编码为 base64。你将在 PHP 中使用 pathinfo、file_get_contents、base64_encode 和 mime_content_type 等函数的组合。
发布时间:2023/03/29 浏览次数:140 分类: PHP
本教程将教你如何在 PHP 中编码 HTML。你将使用 htmlspecialchars()、htmlentities() 和自定义方法。
发布时间:2023/03/11 浏览次数:88 分类: JavaScript
在本文中,我们将了解什么是 Base64 编码以及如何在 JavaScript 中对字符串进行编码和解码。
代做工资流水公司大庆代做银行流水单海口办理薪资流水漳州工作收入证明查询石家庄背调工资流水样本沧州车贷银行流水 制作商丘车贷银行流水 办理温州办理收入证明桂林做企业银行流水绵阳办理房贷收入证明镇江消费贷流水代办金华企业银行流水图片西安代做入职银行流水盐城制作工资流水账单中山办车贷银行流水许昌代做薪资流水单西宁流水账单费用许昌个人工资流水 公司台州代办薪资流水赣州打对公银行流水西宁办工资银行流水东莞流水单图片南宁办理薪资流水单青岛办车贷工资流水邢台签证工资流水办理常德制作公司银行流水长沙转账流水代办威海查询房贷收入证明常德离职证明办理莆田银行流水电子版代做阜阳个人工资流水 打印香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤