0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从ASCII码->Unicode-> UTF-8历史变迁,及其差异

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 作者:黄工的嵌入式技术 2020-02-27 15:56 次阅读

说到ASCII,Unicode和UTF-8,可能大家都知道是字符编码,但具体含义,以及其中差异,可能很多人都不知道。 一、名称解释ASCII:AmericanStandardCode forInformationInterchange,美国信息互换标准代码。 Unicode:统一码、万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。 UTF-8:8-bit Unicode Transformation Format,是一种针对Unicode的可变长度字符编码。 二、历史变迁先给大家看一张变迁图:

很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为“字节”。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为”计算机“。 开始计算机只在美国使用,八位的字节一共可以组合出256种不同的状态。他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作。遇上0×10, 终端就换行,遇上0×07, 终端就向人们嘟嘟叫。他们看到这样很好,于是就把这些0×20以下的字节状态称为“控制码”。他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了。大家看到这样,都感觉很好,于是大家都把这个方案叫做ANSI。 后来,世界各地都开始使用计算机了,但是很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机 保存他们的文字,他们决定采用 127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。从128 到255这一页的字符集被称“扩展字符集”。 等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,而且常用汉字有六七千个,这个时候,中国人民就使用了一套汉字方案叫做GB2312”。随着发展,又发现了一些局限,所以就有了GBK,再继续往后增加了一些字符(如少数名族字体),GBK扩成了GB18030。

因为当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码,连大陆和***这样只相隔了150海里也使用不同编码。这个时候,出现了一个叫 ISO 组织(国际标准化组织)决定着手解决这个问题。他们采用的方法很简单:废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号 的编码!他们打算叫它“Universal Multiple-Octet Coded Character Set”,简称 UCS, 俗称 “Unicode”。

但是Unicode同样也有2个问题:

1.计算机怎么知道二个字节为一个字符,如何识别二个字节为什么一个字符?

2.针对英文字符,如果使用大于1个字节来表示,那么低位的前面几个字节全是0。很奢侈浪费空间,因为现在计算机大部分内容还是英文。

unicode在很长一段时间内无法推广,直到互联网的出现,为解决unicode如何在网络上传输的问题,于是面向传输的众多UTF(UCS Transfer Format)标准出现了。顾名思义,UTF-8就是每次8个位传输数据,而UTF-16就是每次16个位。UTF-8就是在互联网上使用最广的一种unicode的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。 三、Charset and Encoding

1.什么是字符编码Charset (Character set) 字符集:是对字符抽象表示的集合。包括世界上各种文字、符合和字符。 字符集只是一个规则集合的名字,对应到真实生活中,字符集就是对某种语言的称呼。例如:英语,汉语,日语。 2.什么是字符编码对于一个字符集来说要正确编码转码一个字符需要三个关键元素:字库表(character repertoire)、编码字符集(coded character set)、字符编码(character encoding)。

字库表是一个相当于所有可读或者可显示字符的数据库。字库表决定了整个字符集能够展现表示的所有字符的范围。编码字符集,即用一个编码值code point来表示一个字符在字库中的位置。字符编码,将编码字符集和实际存储数值之间的转换关系。 四、UTF-8和Unicode的关系看完上面两个概念解释,相信你应该明白其中关系了。Unicode就是上文中提到的编码字符集,而UTF-8就是字符编码,即Unicode规则字库的一种实现形式。随着互联网的发展,对同一字库集的要求越来越迫切,Unicode标准也就自然而然的出现。它几乎涵盖了各个国家语言可能出现的符号和文字,并将为他们编号。

五、进一步理解UTF-8编码UTF-8编码为变长编码。最小编码单位(code unit)为一个字节。一个字节的前1-3个bit为描述性部分,后面为实际序号部分。

1.如果一个字节的第一位为0,那么代表当前字符为单字节字符,占用一个字节的空间。0之后的所有部分(7个bit)代表在Unicode中的序号。

2.如果一个字节以110开头,那么代表当前字符为双字节字符,占用2个字节的空间。110之后的所有部分(5个bit)加上后一个字节的除10外的部分(6个bit)代表在Unicode中的序号。且第二个字节以10开头。

3.如果一个字节以1110开头,那么代表当前字符为三字节字符,占用3个字节的空间。110之后的所有部分(5个bit)加上后两个字节的除10外的部分(12个bit)代表在Unicode中的序号。且第二、第三个字节以10开头。

来看一个UTF-8编码例子:

发现其中规律:1个字节的UTF-8十六进制编码是以比8小的数字开头的 2个字节的UTF-8十六进制编码是以C或D开头的 3个字节的UTF-8十六进制编码是以E开头的 本文就写到这里,希望对你有帮助。当然,更多关于字符编码的内容,感兴趣朋友可以自行了解。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ASCII
    +关注

    关注

    5

    文章

    172

    浏览量

    35040
  • Unicode
    +关注

    关注

    0

    文章

    24

    浏览量

    12551
  • UTF-8
    +关注

    关注

    0

    文章

    13

    浏览量

    7842
收藏 人收藏

    评论

    相关推荐

    ASCII在数据处理中的应用技巧

    ASCII作为计算机科学中的基石之一,其应用广泛而深远。文本编辑到网络通信,数据存储到程序开发,ASCII
    的头像 发表于 11-10 10:39 388次阅读

    ASCII在网络传输中的重要性

    标准,最初于1963年由美国国家标准协会(ANSI)发布。它使用7位二进制数来表示128个不同的字符,包括大小写字母、数字、标点符号和控制字符。后来,ASCII扩展到了8位,即ASCII-8
    的头像 发表于 11-10 09:47 302次阅读

    ASCIIUnicode的区别

    ASCIIUnicode是两种不同的字符编码标准,它们之间存在显著的区别。以下是对这两者的比较: 一、编码范围 ASCII : 主要用
    的头像 发表于 11-10 09:40 295次阅读

    如何使用ASCII进行编码

    ,包括英文字母、数字、标点符号和一些特殊符号。每个字符在ASCII码表中都有一个唯一的数字代码,范围0到127。以下是使用ASCII进行编码的基本步骤: 1. 确定字符的
    的头像 发表于 11-10 09:37 270次阅读

    AIC3254EVM-U为什么不能将信号通路设置为MIC输入--->PGA---->HP输出的方式?

    新手刚玩AIC3254EVM-U,谁能帮忙看看,analog三个设置哪里出了问题,为什么不能将信号通路设置为MIC输入--->PGA----&
    发表于 10-31 06:37

    sem信号量下semxx->parent.suspend_thread->next的值,应该执行take线程的被改变成了release线程,为什么?

    的某个时候,sem信号量下的semxx->parent.suspend_thread->next的值发生了改变,本来应该指向take线程的地址,变成了指向r
    发表于 07-12 14:36

    ESP32S2使用VSCODE编译,总是会调用build->bootLoader->config->sdkconfig.h文件为什么?

    ESP32S2使用VSCODE编译,在调用sdkconfig.h头文件时,总是会调用 build->bootLoader->config-&
    发表于 06-07 06:48

    如果>=2 传感器与GND短路,CY8CMBR3108无法启动怎么解决?

    。 2) 然而,如果>2 焊盘在上电时与 GND 短路,CY8CMBR3108 将拒绝任何与之交易的尝试,并且似乎无法正常启动。 它永远处于这种状态,直到我消除足够多的短路,使得只有
    发表于 05-31 14:27

    在官方库中发现GPIOx->ODR这种写法,是什么意思,怎么中间会有->?

    本人新手,刚接触st的芯片 在官方库中发现GPIOx->ODR这种写法,不知道这是什么意思,怎么中间会有->? 请论坛上高手予以帮忙解答
    发表于 05-10 06:48

    tftlcd画线程序里面xerr>distance和yerr>distance两个条件能成立吗?

    实验中这个程序是没问题的,就是在个人读程序中,无法理解if(xerr>distance) 和if(yerr>distance) 两个条件,个人认为dista
    发表于 04-22 07:35

    用CubeMx创建了Freertos,工程Middlewares->Tgird_Party->FreeRTOS ->Souce下面只有几个空文件夹为什么?

    我用CubeMx创建了Freertos,发现在工程的Middlewares->Tgird_Party->FreeRTOS -&
    发表于 03-28 06:20

    怎么将pMCI[M1]->pSTM->bState 的 IDLE_START传递给STM[M1]->bState的?

    ] );// STM[M1]->bState switch ( StateM1 ) { case IDLE_START: 看了很多遍都没发现是怎么将 pMCI[M1]-&
    发表于 03-27 07:56

    Open RAN的未来及其对AT&T的意义

    3月14日消息,在“Connected America 2024”会议上,AT&T高级副总裁兼网络首席技术官Yigal Elbaz讨论了Open RAN 的未来及其对AT&T的意义。
    的头像 发表于 03-14 14:40 665次阅读

    采用UTF8UTF16都无法使用中文SSID怎么解决?

    采用 UTF8UTF16都无法使用中文SSID 将wifi ssid设置为 \" test12 \",分别用了以下 3种 unicode编解码格格式,测试情况分分如下: 1.格式一:UT
    发表于 02-29 06:36

    单片机也可以轻松玩转UTF-8和TTF字体了

    要让智能设备支持各国不同的文字,首先得有支持全球文字的编码集,时下最出名的要数UTF-8了。
    的头像 发表于 11-23 17:18 4165次阅读
    单片机也可以轻松玩转<b class='flag-5'>UTF-8</b><b class='flag-5'>码</b>和TTF字体了