ASCII、Unicode、UTF - 8 与汇编代码优化解析
1. ASCII、Unicode 与 UTF - 8
在计算机处理字符数据时,编码是一个核心问题。早期,ASCII 编码在字符表示中占据主导地位,它简单直接,并且在一定程度上与更高级的国际标准 Unicode 兼容。
1.1 Unicode
在 Unicode 出现之前,为字符串添加额外字符的解决方案是临时的,缺乏全局规划。不同的代码页(code page)被用于映射一组数字到屏幕上的显示字符,但这种方法存在局限性。例如,当需要混合使用不同代码页,或者不同组织使用不同代码页时,就会出现问题。如果要写一篇用日语汉字讨论梵语及其向希伯来语发展的论文,代码页的局限性就会凸显出来。
同时,扩展字符集也面临挑战,因为现有的大量文档和程序通常使用 ASCII 编码。将它们迁移到新的标准会很困难。
Unicode 联盟提出的解决方案是将字符列表与字符的表示方式分离。Unicode 为任何语言的每个字符分配一个 32 位的数字,这提供了超过 40 亿种可能性,几乎不会用完。当前的 Unicode 13.0 版本有 143,859 个字符,这比 8 位或 16 位能表示的字符数量多得多,但只是 32 位所能表示范围的一小部分。
Unicode 字符通常用 U + XXXX 表示,XXXX 是十六进制值,这被称为字符的代码点(code point)。对于大多数语言,大多数值位于前 16 位,因此 Unicode 代码点通常用 16 位十六进制值表示,但也可以使用长达 32 位的十六进制值。对于常见的 ASCII 字符,代码点和 ASCII 码相同。