字体编码规则「附:汉字的数字代码查询」

很高兴又和大家见面了,今天郑旨垚来和大家聊一聊字体编码规则,汉字的数字代码查询,以及关于汉字,表示,字节这些一系列的精品相关干货,认认真真阅读完,若能把我想表达的全部理解,相信你已经离大牛不远了哈!

自从上次发布“Framebuffer应用编程”视频后,

我们花了10多天调试STM32MP157板子,4.19内核、5.4内核全部调试通过!

在调试过程中,编写了不少文档,到时整理后再发布给大家,也许可以录一个项目:

怎么把厂家SDK移植到到自己的板子?

这是以后的事了,

从今天开始,韦老师又继续录制、发布视频了。

今天发布文章:字符的编码方式,视频同步录制中。

6.1 字符的编码方式6.1.1 编码与字体

在计算机上,我们看到的字符“A”可能长这样:

字体编码规则,汉字的数字代码查询,汉字,表示,字节

也可能长这样:

字体编码规则,汉字的数字代码查询,汉字,表示,字节

对于同一个TXT文件中的内容,你在Notepad上选择不同字体时,字符显示的形状不一样。

所以TXT文件中保存的是字符的核心:它的编码值。而Notepad上显示时,这些字符对应什么样的形状态,这是由字符文件决定的。编码值,字体是两个不一样的东西,比如A的编码值是0x41,但是在屏幕上显示出来时可以使用不同的形状。

什么叫编码?就是一个字符用什么数字来表示。在计算机里一切都是用数字来表示,比如字符A,用0x01还是0x02来表示它?我们使用0x41来表示它。当你去打开一个TXT文件时,发现里面含有数值0x41,你就知道了:哦,这里有一个字符A。

一个字符用哪个数字来表示?有很多标准,举例讲解。

1. ASCII

是“American Standard Code for Information Interchange”的缩写,美国信息交换标准代码。

电脑毕竟是西方人发明的,他们常用字母就26个,区分大小写、加上标点符号也没超过127个,每个字符用一个字节来表示就足够了。一个字节的7位就可以表示128个数值,在ASCII码中最高位永远是0。

字符和数值的对应关系可以参考:https://baike.baidu.com/item/ASCII

下面摘录部分给大家一个印象:

字体编码规则,汉字的数字代码查询,汉字,表示,字节

2. ANSI

强烈建议阅读:https://www.cnblogs.com/malecrab/p/5300486.html

使用记事本保存文件时,可以选择“ANSI”编码,却没有“ASCII”,如下图所示。怎么回事?

字体编码规则,汉字的数字代码查询,汉字,表示,字节

ASNI是ASCII的扩展,向下包含ASCII。对于ASCII字符仍以一个字节来表示,对于非ASCII字符则使用2字节来表示。并没有固定的ASNI编码,它跟“本地化”(locale)密切相关。比如在中国大陆地区,ANSI的默认编码是GB2312;在港澳台地区默认编码是BIG5。以数值“0xd0d6”为例,对于GB2312编码它表示“中”;对于BIG5编码它表示“笢”。所以对于ANSI编码的TXT文件,如果你打开它发现乱码,那么还得再次细分它的具体编码。

比如对于一个TXT文件,里面的数值如下:

字体编码规则,汉字的数字代码查询,汉字,表示,字节

使用Notepad打开后,选择不同的编码(或称为字符集),有不一样的显示,如下:

字体编码规则,汉字的数字代码查询,汉字,表示,字节

这仅仅是在中国地区就出现这些不兼容的问题。对于不同国家,它们默认的ANSI编码各不相同,所以同一个TXT文件在不同国家就很有可能出现乱码。

根本的原理在于没有“统一的编码”,那解决方法自然就是使用“统一的编码”:UNICODE。

3. UNICODE

在ANSI标准中,很多种文字都有自己的编码标准,汉字简体字有GB2312、繁体字有BIG5,这难免同一个数值对应不同字符。比如数值“0xd0d6”,对于GB2312编码它表示“中”;对于BIG5编码它表示“笢”。这造成了使用ANSI编码保存的文件,不适合跨地区交流。

UNICODE编码就是解决这类问题:对于地球上任意一个字符,都给它一个唯一的数值。

UNICODE仍然向下兼容ASCII,但是对于其他字符会有对应的数值,比如对于“中”、“笢”,它们的数值分别是:0x4e2d、0x7b22

UNICODE中的数值范围是0x0000至0x10FFFF,有1,114,111即100多万个数值,可以表示100多万个字符,足够地球人使用了。

字体编码规则,汉字的数字代码查询,汉字,表示,字节

6.1.2 编码实现

所谓编码实现,就是对于一个数值,怎么表示它。这很奇怪,数值还能怎么表示?比如“中”的UNICODE值是0x4e2d,在TXT文件中怎么表示0x4e2d?直接写入0x4e2d?不行!

比如在TXT文件中写入2字节数据“0x2d 0x4e”,它可以用来表示“中”字吗?不能!它们对应ASCII字符“-N”。

问题的关键在于:怎么断字。在TXT文件中,2字节数据“0x2d 0x4e”是作为一个整体看待,还是拆成2部分看待?

所以,需要用一定的技巧来表示数值,这就对应不同的编码实现。

现在我们知道:

1. ASCII编码中使用一个字节来表示一个字符,只用到其中的7位,最高位恒为0;

2. ANSI编码中,对于ASCII字符仍使用一个字节来表示(BIT7是0),对于非ASCII字符一般使用2个字节来表示,非ASCII字符的数值BIT7都是1。

3. UNICODE:这就有点复杂了,下面一一讲解。

先用记事本新建3个文件:utf-16_le.txt、utf-16_be.txt、utf-8.txt、bom_utf-8.txt,里面的内容都是“ab中”,保存时编码分别选择“UTF-16 LE”、“UTF-16 BE”、“UTF-8”、“带有BOM的UTF-8”,下图是其中一个例子:

字体编码规则,汉字的数字代码查询,汉字,表示,字节

怎么表示一个UNICODE数值?

1. 使用3个字节表示一个UNICODE

不,太浪费。

UNICODE的最大值是0x10FFFF,那使用3个字节来表示一个UNICODE数值?这当然是很省事的方法,但是会造成浪费,比如字符A的UNICOCDE值是0x41,难道也用“0x41 0x00 0x00”这3个字节来表示?

2. UCS-2 Little endian/UTF-16 LE

每个UNICODE只用3字节来表示有点浪费,那只用2字节呢?它可以表示2^16=65536个字符,全世界常用的字符都可以表示了。

Little endian表示小字节序,数值中权重低的字节放在前面,比如字符“ab中”在TXT文件中的数值如下,其中的“a”使用“0x61 0x00”两字节表示;“b”使用“0x62 0x00”两字节表示;“中”使用“0x4e 0x2d”两字节表示。文件开头的“0xff 0xfe”表示“UTF-16 LE”。

字体编码规则,汉字的数字代码查询,汉字,表示,字节

3. UCS-2 Big endian/UTF-16 BE

Big endian表示小字节序,数值中权重低的字节放在后面,比如字符“ab中”在TXT文件中的数值如下,其中的“a”使用“0x00 0x61”两字节表示;“b”使用“0x00 0x62”两字节表示;“中”使用“0x2d 0x4e”两字节表示。文件开头的“0xfe 0xff”表示“UTF-16 BE”。

字体编码规则,汉字的数字代码查询,汉字,表示,字节

4. UTF8

在上面2种方法中,每一个UNICODE使用2字节来表示,这有3个缺点:表示的字符数量有限、对于ASCII字符有空间浪费、如果文件中有某个字节丢失,这会使得后面所有字符都因为错位而无法显示。

使用UTF8可以解决上述所有问题。UTF8是变长的编码方法,有2种UTF8格式的文件:带有头部、不带头部。先举例,看下图:

字体编码规则,汉字的数字代码查询,汉字,表示,字节

对于其中的ASCII字符,在UTF8文件中直接用其ASCII码来表示,比如上图中的0x61表示字符a、0x62表示字符b。上图中的3个字节“0xe4 0xb8 0xad”表示的数值是0x4e2d,对应“中”的UNICODE码。

对于非ASCII字符,使用变长的编码:每一个字节的高位都自带长度信息。请看下图:

字体编码规则,汉字的数字代码查询,汉字,表示,字节

上图中,0xe4的二进制是“11100100”,高位有3个1,表示从当前字节起有3字节参与表示UNICODE;

0xb8的二进制是“10111000”,高位有1个1,表示从当前字节起有1字节参与表示UNICODE;

0xad的二进制是“10101101”,高位有1个1,表示从当前字节起有1字节参与表示UNICODE;

除去高位的“1110”、“10”、“10”后,剩下的二进制数组合起来得到“01001110001101”,它就是0x4e2d,即“中”的UNICODE值。

使用UTF8编码时,即使TXT文件中丢失了某些数据,也只会影响到当前字符的显示,后面的字符不受影响。

字体编码规则,汉字的数字代码查询,汉字,表示,字节

今天我就给朋友们讲到这里吧,希望更多的新手朋友可以得到帮助,看完了,如果你觉得字体编码规则「附:汉字的数字代码查询」还不错的话希望多多支持哦!浏览寂寞网更多页面学习更多相关知识哦!

本文发布者:万事通,不代表寂寞网立场,转载请注明出处:https://www.jimowang.com/p/14456.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 jimowangmail@126.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年11月7日 09:28
下一篇 2022年11月7日 09:31

相关推荐

  • 民办二本大学排名全国前三「附:国内3所实力比较强的民办二本大学」 大学排名网

    很高兴你能坚持经常过来支持笔者:钱诗淇,今天就来说说关于民办二本大学排名全国前三,国内3所实力比较强的民办二本大学 大学排名网,以及大学,学院,插图的相关内容干货,想要做好首先一定要把基本功练好了,否者是很难持续提升的。 众所周知,我国的大学除了多数的公办院校外,还有不少民办性质的学校。其中,民办二本近些年来逐渐成为很多考生读本科的机会,但往往又容易被人认为…

    2022年10月20日 自媒体
  • 未来哪些工作岗位会是“铁饭碗”「详细讲解:这些行业你会选择吗」

    很高兴又和小伙伴们见面了,这次朱厚成主要整理了一些关于未来哪些工作岗位会是“铁饭碗”,这些行业你会选择吗的事情,以及铁饭碗,岗位,行业,找工作,竞争力的一系列相关干货,如果你是老司机,你可能觉得很简单,但如果你是新手,你可能就不这么想了。 其实,找一份好工作的确是不容易的,毕竟就连一些大学生毕业之后,也是回到小县城找工作的,而且竞争力也比较大。但未来哪些工作…

    2023年1月22日
  • 阴虱不痒了是不是就好了 以及阴虱自己捉的干净吗

    最近有很多朋友问蒋含韵关于阴虱不痒了是不是就好了,阴虱自己捉的干净吗的事情,我来为大家解答一下,还有可能会,症状,性行为,部位,建议的一系列实用干货和最新分享内容,在写这篇文章之前,我经过了很多次的尝试和总结,希望这些经验对你也有帮助。 阴虱不痒了并不能说明阴虱彻底好了,可能说阴虱的不适症状逐渐好转,可能是天气原因,也有可能是涂抹的药物有效,但要确定阴虱是否…

    2023年4月6日
  • 欧莱雅染发霜怎么样安不安全 十大放心家用品牌的染发剂

    首先,卫仲佳感谢你能坚持经常过来关注我!下面我就来说说欧莱雅染发霜怎么样安不安全 十大放心家用品牌的染发剂,还有染发剂,品牌,系列等各种干货文章,思路很重要,希望我整理分享的这篇文章对你能有一定的帮助! 现在很多都喜欢自己在家染发,百元左右就可以搞定。在家染发最怕的就是“图文不符”,一不小心把自己整成杀马特,所以选对颜色最重要。 接下来给大家推荐几款上色自然…

    2023年1月2日 自媒体
  • 伍佰最好听的十首歌曲「最新伍佰哪首歌最好听」

    HI,大家好,废话不多说,直接上干货:伍佰最好听的十首歌曲(伍佰哪首歌最好听),还有关于歌曲,专辑,金曲这些的相关干货文章,如果你是老司机,你可能觉得很简单,但如果你是新手,你可能就不这么想了。 伍佰相信大家都很熟悉,他是我国台湾著名的摇滚歌手,也是位十分有才华的歌手。伍佰的歌曲经典的相当的多、至今能与他媲美的少之又少,广为传唱的歌曲有《挪威的森林》、《La…

    自媒体 2022年10月23日
  • 2023内蒙古几月份停暖气 以及内蒙古停止供暖后还热吗

    最近有很多朋友问赵跃华关于2023内蒙古几月份停暖气,内蒙古停止供暖后还热吗的事情,我来为大家解答一下,还有暖气,暖气片,阀门,回水,时间的一些实用干货和最新内容分享,在成功的路上,没有什么比清晰的思路更重要的了。希望我的分享能够为你们的成功带来一些帮助和指导! 随着3月的到来,各地的气温都开始回暖,所以对于北方供暖的城市几月份停暖气成了大家茶余饭后讨论的焦…

    2023年4月16日