目录
字符编码
ASCII编码
中文编码
GB2312编码
区位码
GBK编码
Unicode字符集和编码
UTF-32
UTF-16
UTF-8
字模
字模的构成
字模显示原理
如何制作字模
字模寻址公式
存储字模文件
各种模式的液晶显示字符实验
显示ASCII编码的字符
代码分析
ASCII字符和中文显示函数
字符编码
由于计算机只能识别0和1,文字也只能以0和1的形式在计算机里存储,所以我们需要对文字进行编码才能让计算机处理,编码的过程就是规定特定的01数字字符串来表示特定的文字,最简单的字符编码就是ASCII编码。
ASCII编码
学习C语言的时候,我们知道在程序设计中使用的ASCII编码表约定了一些控制字符、英文及数字。他们在存储器中,本质也是二进制数,只是我们约定这些二进制数可以表示某些特殊意义,如以ASCII编码解释数字“0x41”时,它表示的是英文字符“A”。ASCII编码表可以分为两部分,第一部分是控制字符或通讯专用字符,它们的数字编码从0-31,它们并没有特定的图形显示,但会根据不同的应用程序,而对文本显示有不同的影响.ASCII表的第二部分包括空格、阿拉伯数字、标点符号、大小写英文字符以及“DEL”,这部分的数字编码从32-127,除了最后一个DEL符号外都能以图形的方式显示,具体的ASCII表这里不再赘述,读者可以网上查找。
后来,计算机推广之后,还加入了各种形状和符号,一直编号到255,从128-255的字符被称为ASCII的扩展字符集,至此,基本存储单位Byte能表示的编号已经全部用完了。
中文编码
由于汉字非常多,常用字就有6000多个,如果像ASCII编码表那样只使用1个字节最多只能表示256个汉字、所以我们使用2个字节来编码。
GB2312编码
我们首先定义的就是GB2312编码,它把 ASCII码表127之后的扩展字符集直接取消掉,并规定小于127的编码按原来的ASCII标准解释字符,当2个大于127的字符联结在一起时,就表示1个汉字。
第一个字节使用(0xA1-0xFE)编码,第2个字节使用(0xA1-0xFE)编码,这样的编码组合起来可以表示了7000多个符号,其中包括汉字6763个汉字。在这些编码里,我们还把数学符号、罗马字母、日文片假名等都编进表中,就连原来在ASCII表中原有的数字、标点以及字母也重新编了2个字节长的编码,这就是平时在输入法可以切换“全角”和“半角”符号的原因,半角就是原来的1个字节的ASCII编码。
下面的表格说明GB2312兼容ASCII码的原理,说明了GB2312是如何兼容ASCII的,当我们设定系统使用GB2312标准的时候,它遇到一个字符串时,会按字节检测值得大小,若遇到连续两个字节得数值都大于127时,就把这两个连续得字节合在一起,用GB2312解码,若遇到得数值小于127,就直接用ASCII解码。
第1字节
|
第2字节
|
表示的字符
|
说明
|
0x68
|
0x69
|
(hi)
|
两个字节的值都小于127(0x7F),使用ASCII解码
|
0xB0
|
0xA1
|
(啊)
|
两个字节的值都大于127(0x7F),使用GB2312解码
|
区位码
在GB2312编码的实际使用中,有时会用到区位码的概念,见图GB2312的部分区位码。GB2312编码对所收录字符进行了“分区”处理,共94个区,每区含有94个位,共8836个码位。而区位码实际是GB2312编码的内部形式,它规定对收录的每个字符采用两个字节表示,第一个字节为“高字节”,对应94个区;第二个字节为低字节,对应94个位。所以它的区位码范围就是:0x0101-0x9494。为兼容ASCII码,区号和位号分别加上0xA0偏移就得到GB2312编码。在区位码上加上0xA0,可求得GB2312编码的范围:0xA1A1-0XFEFE,其中汉字的编码范围是0xB0A1-0XF7FE,第一字节0xB0-0xF7(对应位号16-87),第二字节0xA1-0XFE(对应位号01-94)。
例如,“啊”字是 GB2312 编码中的第一个汉字,它位于 16 区的 01 位,所以它的区位码就是 1601, 加上 0xA0 偏移,其 GB2312 编码为 0xB0A1。其中区位码为 0101 的码位表示的是“空格”符。
GBK编码
据统计,GB2312 编码中表示的 6763 个汉字已经覆盖中国大陆 99.75% 的使用率,单看这个数字
已经很令人满意了,但是我们不能因为那些文字不常用就不让它进入信息时代,而且生僻字在人
名、文言文中的出现频率是非常高的。为此我们在 GB2312 标准的基础上又增加了 14240 个新汉
字 (包括所有后面介绍的 Big5 中的所有汉字) 和符号,这个方案被称为 GBK 标准。增加这么多字
符,按照 GB2312 原来的格式来编码,2 个字节已经没有足够的编码,我们聪明的程序员修改了
一下格式,不再要求第 2 个字节的编码值必须大于 127,只要第 1 个字节大于 127 就表示这是一
个汉字的开始,这样就做到了兼容 ASCII 和 GB2312 标准。
表格 GBK 兼容 ASCII 和 GB2312 的原理 说明了 GBK 是如何兼容 ASCII 和 GB2312 标准的,当我 们设定系统使用 GBK 标准的时候,它按顺序遍历字符串,按字节检测字符值的大小,若遇到一
个字符的值大于 127 时,就再读取它后面的一个字符,把这两个字符值合在一起,用 GBK 解码,
解码完后,再读取第 3 个字符,重新开始以上过程,若该字符值小于 127,则直接用 ASCII 解码。
第1字节
|
第2字节
|
第3字节
|
表示的字符
|
说明
|
0x68(<7F)
|
0xB0(>7F)
|
0xA1(>7F)
|
h啊
|
第1字节小于127,使用ASCII解码,第2字节大于127直接使用GBK解码,兼容GB2312
|
0xB0(>7F)
|
0xA1(>7F)
|
0X68(<7F)
|
啊h
|
第1字节大于127,直接使用GBK解码,第3字节小于127直接使用ASCII解码
|
0XB0(>7F)
|
0X56(<7F)
|
0X68(<7F)
|
痴h
|
第1字节大于127,第2字节虽然小于127,直接使用GBK解码,第3字节小于127直接使用ASCII解码
|
后面还有GB18030编码,使用4字节编码,Big5繁体中文编码,由于篇幅原因,可以有兴趣的网上了解。
Unicode字符集和编码
由于各个国家或地区都根据使用自己的文字系统制定标准,同一个编码在不同的标准里表示不
一样的字符,各个标准互不兼容,而又没有一个标准能够囊括所有的字符,即无法用一个标准表
达所有字符。国际标准化组织 (ISO) 为解决这一问题,它舍弃了地区性的方案,重新给全球上所
有文化使用的字母和符号进行编号,对每个字符指定一个唯一的编号 (ASCII 中原有的字符编号
不变),这些字符的号码从 0x000000 到 0x10FFFF,该编号集被称为 Universal Multiple-Octet Coded CharacterSet,简称 UCS,也被称为 Unicode。最新版的 Unicode 标准还包含了表情符号 (聊天软件 中的部分 emoji 表情),可访问 Unicode 官网了解:http://www.unicode.org。
Unicode 字符集只是对字符进行编号,但具体怎么对每个字符进行编码,Unicode 并没指定,因此
也衍生出了如下几种 unicode 编码方案 (Unicode Transformation Format)。
UTF-32
对Unicode字符集编码,最自然的就是UTF-32方式。编码时,它直接对Unicode字符集里的每个字符都使用4字节来表示,转换方式很简单,直接将字符对应的编号数字转换为4字节的二进制数。如表格所示,由于UTF-32把每个字符都用4字节来存储,因此UTF-32不兼容ASCII码,也就是说ASCII编码使用的文件用UTF-32打开会乱码。
字符
|
GBK编码
|
Unicode编号
|
UTF-32编码
|
A
|
0x41
|
0x0000 0041
|
大端格式0x0000 0041
|
啊
|
0xB0A1
|
0x0000 554A
|
大端格式0x0000 554A
|
对UTF-32数据进行解码的时候,以4字节为单位进行解析即可,根据编码可直接找到Unicode字符集中对应编号的字符。
UTF-32的优点是编码简单,解码方便,读取编码的时候每次都直接读4字节,不需要加其他的判断。它的缺点是浪费存储空间,大量常用的字符的编号只需要两个字节就能表示。其次在存储的时候需要指定字节顺序,是高位字节存储在前(大端格式),还是低位字节存储在前(小端格式)。
UTF-16
针对UTF-32的缺点,人们改进了UTF-16的编码方式,如表格UTF-16编码示例,它采用2字节或4字节的变长编码方式(UTF-32为定长编码方式)。对Unicode字符编号在0-65535的统一使用2字节来表示,将每个字符的编号转换为2字节的二进制数,即从0x0000到0xFFFF.而由
于 Unicode 字符集在 0xD800-0xDBFF 这个区间是没有表示任何字符的,所以 UTF-16 就利用这段 空间,对 Unicode 中编号超出 0xFFFF 的字符,利用它们的编号做某种运算与该空间建立映射关 系,从而利用该空间表示 4 字节扩展,感兴趣的读者可查阅相关资料了解具体的映射过程。
字符
|
GB18030编码
|
Unicode编号
|
UTF-16编码
|
A
|
0x41
|
0X0000 0041
|
大端格式0x0041
|
啊
|
0xB0A1
|
0x0000 554A
|
大端格式0x554A
|
STM32——液晶显示中英文相关推荐
- STM32液晶显示中英文
✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!!
- 第28章 LTDC—液晶显示中英文—零死角玩转STM32-F429系列
第28章 LTDC-液晶显示中英文 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...
- 第28章 LTDC—液晶显示中英文
本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.库帮助文档<STM32F779xx_User_Manual.chm>. 关于开发板配 ...
- STM32 LCD中英文字符显示学习笔记
本实验基于STM32 LCD英文字符显示学习笔记. 开发板:野火指南者(STM32F103VE) STM32库版本:STM32F10x_StdPeriph_Lib_V3.5.0 IDE:KEIL5(代 ...
- 第 28 章 LCD—液晶显示中英文(附个人遇到的一些问题)
28.1 字符编码 1.1 ASCII 编码 1.2 中文编码 1.2.1 GB2312 标准 1.2.1.1 区位码 1.2.2 GBK 编码 1.2.3 GB18030 1.2.4 Big5 编码 ...
- LCD—STM32液晶显示(1.显示器简介及LCD显示原理)(6000字详细介绍)
目录 显示器简介 液晶显示器 液晶 像素 液晶屏缺点 LED显示器 OLED显示器 显示器的基本参数 STM32板载液晶控制原理(不带微控制器) 液晶控制原理 控制信号线(不带液晶控制器) 液晶数据传 ...
- STM32液晶显示HT1621驱动原理及程序代码
1.HT1621电路分析 HT1621为32×4即128点内存映像LCD驱动器,包含内嵌的32×4位显示RAM内存和时基发生器以及WDT看门狗定时器. HT1621驱动电路如下图所示: 图1 与单片机 ...
- 有一说一!这才是RabbitMQ实现分布式事务的正确姿势(项目实战)
分布式事务 随着互联网快速发展,微服务,SOA 等服务架构模式正在被大规模的使用,现在分布式系统一般由多个独立的子系统组成,多个子系统通过网络通信互相协作配合完成各个功能. 有很多用例会跨多个子系统才 ...
- 基于STM32的12864液晶理解
前言 字符型液晶显示模块是一种专门用于显示字母.数字.符号等点阵式 LCD,目前常用 161,162,202 和 402 行等的模块. 上面指的是以字符为单位,如161,也就是1行16列,最多能显示1 ...
最新文章
- 性能超越GPU、FPGA,华人学者提出软件算法架构加速AI实时化
- 分布式存储系统的关键技术-存储层级内的优化技术
- 二叉树为空意味着二叉树_程序员的进阶课-架构师之路(8)-二叉树
- StoryBoard学习..(很详细.)
- Jquery Uploadify插件+Servlet解决FTP多文件上传
- 用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询
- python怎么标注折线图_利用python画折线图
- 一个留美女博士的七年----分享给所有还相信梦想的朋友(zz 喜欢~~)
- 人脸面部情绪识别(一)
- Animation动画学习
- 用java画国际象棋棋盘
- 爱奇艺播放按钮动画解析
- 怎样和虐死人的老项目谈恋爱
- 怎么把html格式转换成数字,怎么把数字转变成文本格式
- pc客户端软件自动化测试工具,自动化测试工具(QuickTester)
- Echarts世界地图汉化及其数据包
- MYSQL关闭安全模式
- 分布式系统基础--CAP理论
- jQuery贼简单的选项卡切换
- 美光并没有背信弃义,而是在向英特尔示好
热门文章
- 飞机游戏代码(JAVA)
- 2021高考成绩查询河南文化课,河南美术生,文化需要多少分才能上本科? 2021
- Vista将推新下载内容 DreamScene登场
- 华为汽车再创奇迹,月订单可望破3万,将成特斯拉有力挑战者
- 将一个目录添加到pythonpath
- 个人笔记之面向对象--从游戏小DEMO方向了解继承
- 看完《泰坦尼克号》观后感
- 计算机处理器性能天梯,2021最新版电脑处理器性能天梯图:你的CPU排第几?
- 翼码张波O2O分享8:O2O的消费体验
- 奶牛逃跑_纪中1765_dp
|