字符集和Unicode编码以及字库
字符集和字符编码的关系 :
字符集是书写系统字母与符号的集合,为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point);字符集种类较多,每个字符集包含的字符个数不同,常见的字符集名称:ASCII字符集、GB2312字符集、GB18030字符集、UNICODE字符集等。
字符编码则是将字符映射为一特定的字节或字节序列,是一种规则,将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)。通常特定的字符集采用特定的编码方式(即一种字符集对应一种字符编码(例如:ASCII、IOS-8859-1、GB2312、GBK,都是即表示了字符集又表示了对应的字符编码)),因此基本上可以将两者视为同义词。
Unicode和Unicode编码:
Unicode是一个字符编码的标准规范,而UTF-8/UTF-16/UTF-32只是对这个标准规范的具体实现,可称为Unicode编码。
Unicode 目前规划的总空间是17个平面(平面0至16,开头是0x0-----0x10),0x0000 至 0x10FFFF。每个平面有 65536 个码点。2字节:2^16=65536,4字节:2^32=4,294,967,296
0平面是2字节字符,1-16平面是4字节字符。
BMP 的字符是 Unicode 中最基础和最常用的一部分,以 UTF-16 编码时使用2字节,以 UTF-8 编码时使用1至3字节。
超出 BMP(平面0) 的字符以 UTF-16 或 UTF-8 编码都需要4字节。
另外还有一个比较少用的编码形式,UTF-32,它编码任何 Unicode 字符都需要4个字节。
17*65536 = 1,114,112,32位可容纳下所有的码点
由于目前unicode的表的大小可以算到如果使用utf-32编码的话,用32个bit就能完全容纳下所有的码点,所以utf-32的特点是每一个字符编码后都是4个字节,是定长的,相对的utf-8和utf-16都是变长的
1、ASCII码 :128个字符。
特殊的:
0-9是48-57
A-Z 是65-90
a-z 是97-122
2、Unicode(UTF-16)
联盟为每个字母中的每个柏拉图字母分配了一个魔幻数字,其写法如下:U + 0639。这个幻数称为代码点。
3、UTF-8
在UTF-8中,从0-127的每个代码点都存储在一个字节中【ASCALL码】。实际上,只有代码点128和更高的代码点才使用2、3(最多6个字节)存储。相比于只使用英文字母的美国人使用UTF-8比使用UTF-16减少一半内存。
传统的“两字节存储”方法称为UCS-2(因为它有两个字节)或UTF-16(因为它有16位)
4、没有纯文本这样的东西。
如果您在内存,文件或电子邮件中有字符串,则必须知道它的编码格式,否则将无法解释它或将其正确显示给用户。
5、乱码
如果字符集和字符编码两者之间的转换规则不统一标准,就会乱码现象。简单的说乱码的出现是因为:编码和解码时用了不同或者不兼容的字符集。
字库
字库就是字型库(FONT LIBRARY),其实计算机上显示的每个字符(不管它是哪种语言的),都是一个小的图案。字库就是把这些小的图案以图片的某种形式保存起来,需要显示的 时候还原出来就可以了。在WINDOWS操作系统里的字库存放在系统盘windows/fonts文件夹下,在linux操作系统中字库存放在这/usr /share/fonts/文件夹下。
本文作者:好Wu赖
本文链接:https://www.cnblogs.com/erlongxizhu-03/p/13293952.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现