Win*_*oon 1 unicode encoding utf-8
我读了一些文章有关Unicode和UTF-8。
Unicode 标准描述了字符如何由代码点表示。代码点是一个整数值,通常以 16 进制表示。在标准中,代码点使用符号 U+12CA 表示,表示值为 0x12ca(十进制 4,810)的字符。Unicode 标准包含许多列出字符及其相应代码点的表格:
严格来说,这些定义意味着说“这是字符 U+12CA”是没有意义的。U+12CA 是一个码位,代表某个特定的字符;在这种情况下,它代表字符“ETHIOPIC SYLLABLE WI”。在非正式环境中,有时会忘记代码点和字符之间的这种区别。
总结上一节:Unicode 字符串是一系列代码点,它们是从 0 到 0x10FFFF(十进制的 1,114,111)的数字。该序列需要表示为内存中的一组字节(即 0 到 255 之间的值)。将 Unicode 字符串转换为字节序列的规则称为编码。
我想知道为什么我们必须将 U+12CA 编码为 UTF-8 或 UTF-16,而不是将 12CA 的二进制文件直接保存在磁盘中。我认为原因是:
Unicode 不是自同步代码,所以如果
10 represent A
110 represent B
10110 represent C
Run Code Online (Sandbox Code Playgroud)当我在磁盘中看到 10110 时,我们无法分辨它是 A 和 B 还是只是 C。
我对吗?
阅读有关Unicode、UTF-8和UTF-8 无处不在的网站。
有超过一百万个 Unicode代码点(您提到了 1,114,111...)。因此,您至少需要 21 位才能将它们全部分开(因为 2 21 > 1114111)。
所以你可以直接存储 Unicode 字符,如果你用足够宽的整数类型来表示它们中的每一个。实际上,该类型将是一些 32 位整数(因为处理 3 字节即 24 位整数不方便)。这称为UCS -4,一些系统或软件已经以这种格式处理了它们的 Unicode 字符串。
另请注意,由于人类语言的多样性(并且因为 Unicode 具有组合字符),因此显示Unicode 字符串非常困难。有些需要从右到左显示(阿拉伯语、希伯来语....),有些需要从左到右显示(英语、法语、西班牙语、德语、俄语...),还有一些从上到下(中文...) . 显示 Unicode 字符串的库应该能够显示包含英语、中文和阿拉伯语单词的字符串......然后你会看到解码 UTF-8 是 Unicode 字符串显示的简单部分(存储 UCS-4 字符串无济于事很多)。
但是,由于英语是 IT 技术中的主要语言(出于经济原因),将字符串保存为 UTF8 格式通常更便宜。如果您的系统处理的大部分字符串是英语(或使用拉丁字母表的其他欧洲语言),那么它会更便宜,并且将它们保存在 UTF-8 中所需的空间更少。
我想当中国成为 IT 领域的主导力量时,事情可能会改变(也可能不会)。
(我不知道今天在中国超级计算机或智能手机上最常用的编码;我猜它仍然是 UTF-8)
在实践中,使用一个库(可能是C 中的libunistring或Glib)来处理 UTF-8 字符串和另一个(例如C 中的pango和GTK)来显示它们。您会在各种编程语言中找到许多与 Unicode 相关的库。
我想知道为什么我们必须将U+12CA编码为UTF-8或UTF-16,而不是直接将12CA的二进制文件保存在磁盘中。
如何将12CA直接写入磁盘?它的值比一个字节所能容纳的要大,因此您需要至少写入两个字节。你写12后面加CA吗?您刚刚将其编码为 UTF-16BE。这就是编码……如何将抽象数字写为字节的定义。
其他阅读:
每个软件开发人员绝对必须了解 Unicode 和字符集的绝对最低要求(没有任何借口!)
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |