2026/1/7 7:22:37
网站建设
项目流程
公司网站能自己做二维码,c 网站开发,wordpress 欢迎插件,网站建设属开票核定税种整内容也可以在公众号「非专业程序员Ping」查看一、字符/Character对用户可见的“一个字符”#xff0c;通常是我们在屏幕上看到的一个字母、数字、emoji 或组合字符。比如#xff1a;a、、#x1f468;#x1f469;#x1f467;#x1f466;二、字符编码标准/字符…整内容也可以在公众号「非专业程序员Ping」查看一、字符/Character对用户可见的“一个字符”通常是我们在屏幕上看到的一个字母、数字、emoji 或组合字符。比如a、é、二、字符编码标准/字符集字符编码标准定义的是如何将字符映射到唯一编码常见的字符编码标准比如ASCII、Unicode、GBK等2.1 ASCIIASCII7位定义了 128 个字符的唯一编码包括数字0到9、小写字母a到z、大写字母A到Z以及常用标点符号等。2.2 UnicodeUnicode又叫万国码目标是为所有字符定义唯一编码Code Point。为了解决ASCII/GBK不能定义全部字符的问题。比如a - U0061 - U1F468注意Unicode只负责分配码位Code Point并不决定具体的存储形式。Unicode的前 128 个码点与ASCII相同。2.2.1 Code PointCode Point也叫码位Unicode中为每个字符分配的唯一编码。一个字符可以对应一个或多个Code Point比如aU0061对应 1 个Code PointU1F468 () U200D (ZWJ) U1F469 () U200D (ZWJ) U1F467 () U200D (ZWJ) U1F466 ()对应 7 个Code PointéU00E9或U0065 U0301备注在Unicode中é实际上有两种表示方式单一字符表示法即直接使用U00E9这个单独的Unicode码位表示é。组合字符表示法使用U0065字母e和U0301重音符号两个Unicode码位来表示一个é字符。为什么会有这两种表示法历史原因Unicode设计时考虑到了不同语言的需求许多语言如法语、西班牙语等使用带有重音符号的字符因此Unicode同时支持这两种表示方式。兼容性一些旧的系统或字体可能只支持分解字符表示法因此Unicode也保留了这种组合字符的方式以提高兼容性。2.2.2 Code UnitCode Unit也叫码元代码单元表示计算机中实际存储Unicode的基本单位取决于编码方式。比如UTF-8 Code Unit是 1 字节8 Bit比如a在UTF-8编码下占 1 个字节表示为0x61。UTF-16 Code Unit是 2 字节16 Bit比如a在UTF-16编码下占 2 个字节表示为0x0061。UTF-32 Code Unit是 4 字节32 Bit比如a在UTF-32编码下占 4 个字节表示为0x00000061。三、字符编码方式字符编码方式决定了字符如何存储、传输和解码常见的编码方式有UTF-8、UTF-16、UTF-32等UTF-8可变长度用 1 到 4 个字节来存储 Unicode 字符为了节省存储资源。UTF-16可变长度用 2 或 4 个字节存储字符。UTF-32固定长度每个字符始终使用 4 字节存储。比如é的Code Point是U0065 U0301当以UTF-32方式编码时每个Code Point未超过4字节所以表示为0x000000650x00000301当以UTF-16方式编码时每个Code Point未超过2字节所以表示为0x00650x0301当以UTF-8方式编码时0x0301值超过了128需要按UTF-8格式拆分为0xCC0x81所以表示为0x650xCC0x81QUTF-8编码为什么是按128做比较按理说1字节0xFF表示的最大值是255A有两个原因一是为了与ASCII兼容ASCII只支持了128个字符编码在UTF-8编码中前128位与ASCII编码相同二是UTF-8编码中会将第一个字节的高位部分用来标识这个字符的编码长度具体为0xxxxxxx表示 1 字节字符ASCII 范围110xxxxx表示 2 字节字符1110xxxx表示 3 字节字符11110xxx表示 4 字节字符