这对我来说似乎是最令人困惑的问题。
如何识别新字符的开头?
码点是如何分配的?
我们以汉字为例
分配给它们的代码点范围是多少,
为什么这样分配,有什么原因吗?
编辑: 请用你自己的话描述它,而不是通过引用。
或者可以推荐一本系统讲Unicode的书,你认为已经讲清楚了(这是最重要的)
Unicode Consortium 负责代码点分配。如果您想要分配新字符或代码页,您可以在那里申请。有关示例,请参阅提案管道。
Unicode 规范的第 2 章定义了 Unicode 的一般结构,包括为哪种字符分配哪些范围。
在这里查看 Unicode 的总体概述,可能会有所帮助:每个软件开发人员绝对必须了解 Unicode 和字符集的绝对最低限度(没有借口)
Unicode 是由 Unicode Consortium 指定的标准。该规范定义了 Unicode 的字符集、通用字符集 (UCS),以及一些对该字符进行编码的编码,即 Unicode 转换格式、UTF-7、UTF-8、UTF-16 和 UTF-32.
如何识别新字符的开头?
这取决于所使用的编码。 UTF-16 和 UTF-32 是具有固定码字长度(分别为 16 和 32 位)的编码,而 UTF-7 和 UTF-8 具有可变码字长度(从 8 位到 32 位),具体取决于字符点待编码。
码点是如何分配的?我们以汉字为例。分配给它们的代码点范围是什么,为什么这样分配,有什么原因吗?
UCS 分为所谓的“字符平面”。第一个是 Basic Latin(U+0000–U+007F,像 ASCII 一样编码),第二个是 Latin-1 Suplement(U+0080–U+00FF,像 ISO 8859-1 一样编码)等等.
而不是 代码页 字符编码是一种将某些字符映射到某些数据的方法(反之亦然!)
正如维基百科所说:
字符编码系统由一个代码组成,该代码将给定指令库中的每个字符与其他内容(例如自然数、八位位组或电脉冲序列)配对,以便于数据(通常是数字和/或文本)的传输)通过电信网络或计算机中的文本存储最流行的字符编码是
ASCII、UTF-16 和 UTF-8
ASCII第一个在计算机中广泛使用的代码页。在 ANSI 中,每个字符只分配一个字节。因此 ANSI 的字符集非常有限(英文字母、数字……)
正如我所说,ASCII 在 MS-DOS 等旧操作系统中得到广泛使用。但 ASCII 并没有消亡并且仍在使用。当你有一个 10 个字符的 txt 文件并且它是 10 个字节时,你就有了一个 ASCII 文件!
在UTF-16中,一个字符分配两个字节。所以我们在 UTF-16 中可以有 65536 个不同的字符!
Microsoft Windows 在内部使用 UTF-16。
UTF-8 是另一种流行的字符编码方式。它使用可变长度字节(1 字节到 4 字节)作为字符。它还与 ASCII 兼容,因为 ASCII 字符使用 1 个字节。
大多数基于 Unix 的系统使用 UTF-8
编程语言不依赖于代码页。也许编程语言的特定实现不支持代码页(如 Turbo C++)
您可以使用现代编程语言中的任何代码页。他们还有一些用于转换代码页的工具。
有不同的 Unicode 版本,例如 Utf-7、Utf-8...您可以在
here(推荐!)阅读它们,也许还可以在here了解更正式的详细信息
- Unicode 范围 基础拉丁语 - U+0000 到 U+007F
Latin-1 补充 U+0080 至 U+00FF
西里尔字母 U+0400 至 U+04FF
希腊语和科普特语 U+0370 至 U+03FF
阿拉伯语 U+0600 至 U+06FF
希伯来语 U+0590 至 U+05FF
梵文 U+0900 至 U+097F
中日韩统一表意文字 U+4E00 至 U+9FFF
平假名 U+3040 至 U+309F
片假名 U+30A0 至 U+30FF
朝鲜文音节 U+AC00 至 U+D7AF
泰语 U+0E00 至 U+0E7F
泰米尔语 U+0B80 转 U+0BFF
孟加拉语 U+0980 至 U+09FF
格鲁吉亚 U+10A0 至 U+10FF
亚美尼亚 U+0530 至 U+058F
埃塞俄比亚 U+1200 至 U+137F