我可以在Unicode中看到一些重复的字符.例如,字符"C"可以由代码点U + 0043和U + 0421表示.为什么会这样?
Joe*_*oey 20
正如其他人所指出的那样,你在这里的主要谬误是混淆了拉丁文和西里尔文字以及其中的一些字形(即C(U + 0043 LATIN CAPITAL LETTER C)和С(U + 0421 CYRILLIC CAPITAL LETTER ES)).有许多这样的角色对看起来很相似但是角色不同.例如,你会发现很多拉丁语,希腊语和西里尔语.但大多数时候,它们只能以大写或小写形式工作.
然而,有事实上的重复,有时故意如此.例如,整个(ASCII)拉丁字母表在U + FF00和U + FFEF之间的'Halfwidth and Fullwidth Forms'Unicode块中再次表示两次.然而,还有其他这样的例子,最值得注意的是在平面1上的数学字母表部分中,其中存在三个或四个以上的拉丁字母.
实际上还有其他东西是相同的角色,但在不同的代码点.例如,存在μ(U + 00B5 MICRO SIGN)和μ(U + 03BC GREEK SMALL LETTER MU).这些通常通过分解联系起来.
Unicode处理称为代码点的抽象概念.代码点明确定义了一个字符及其脚本或组.它没有说明如何渲染字体中的相应字形(对于拉丁语而言可能会有很大差异).它也没有定义如何在文件或内存中表示此代码点(即作为字节序列).这是Unicode转换格式之一的工作.
在具有不同代码点的两种语言中具有相似外观的特征是什么原因?
Unicode的要点是:
因此,非常强烈的动机是将脚本分开,而不是根据它们的外观来映射字符.无论如何,外观可能很棘手.以西里尔字母'т'为例,在这里看起来像一个较小的大写拉丁语'T'.然而,通常的方式是在斜体时呈现:'т'看起来像一个小写的拉丁语'm'.你真的不想通过外观来映射这些角色.
字母LOOK相同,但却非常不同.U + 0043是拉丁字母C,但是U + 0421是西里尔字母С(其对应于拉丁字母表中的S).
由于它们无关的含义,需要单独的代码点来防止外壳和排序算法对上下文敏感 - 你会突然猜到你正在处理的语言.
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |