2009-11-16 17 views

回答

20

正如其他人所指出的,這裏的主要謬誤是混淆了拉丁語和西里爾文腳本以及其中的一些字形(即C(U+0043 LATIN CAPITAL LETTER C)和С(U+0421 CYRILLIC CAPITAL LETTER ES))。有很多這樣的字符對看起來很像,但卻是不同的字符。例如,您會在拉丁語,希臘語和西里爾語中找到很多。但大多數情況下,它們只能以大寫或小寫形式工作。

然而,存在實際上重複的,有時故意如此。例如,整個(ASCII)拉丁字母在U + FF00和U + FFEF之間的'半寬和全寬窗體'Unicode塊中再次表示兩次。還有其他類似的例子,其中最引人注目的是平面1上的數學字母表部分,其中有三個或四個以上的拉丁字母表示。

還有其他的東西,實際上是相同的字符,但在不同的代碼點。例如,有μ(U+00B5 MICRO SIGN)和μ(U+03BC GREEK SMALL LETTER MU)。這些通常通過decomposition鏈接。

的Unicode涉及的所謂code point抽象的概念。代碼點明確定義了一個字符及其腳本或組。它說沒有如何對應字形的字體將呈現(可廣泛用於拉丁文有所不同的話)。它也沒有定義如何在一個文件或存儲器中表示這個代碼點(即作爲一個字節序列)。這是Unicode Transformation Formats之一的工作。

什麼原因在兩種語言中具有不同的代碼點具有相似的外觀特徵?

這裏編碼,它的要點是:

  • 兼容性的每一個先前存在的字符編碼。這必須確保編碼中使用的每個字符與Unicode代碼點具有一對一的映射關係。
  • 忠實,準確地反映每一個被採用時下劇本,後來擴大到其他腳本正在使用和需要存儲在計算機系統。

因此,有一個非常強烈的動機,以保持腳本分離和嘗試根據自己的外觀特徵的地圖。無論如何,外觀可能會非常棘手。以西裏爾字母'т'爲例,這裏看起來像一個較小的大寫拉丁文'T'。但是,斜體顯示的通常方式如下:'т'看起來像一個小寫的拉丁文'm'。你真的不想通過外觀來映射這些角色。

9

如果你看一下U+0400 to U+04FF code chart你會發現,U + 0421是西里爾大寫福斯產品「ES」。它可能是看起來像一個拉丁語C,但它是一個不同的邏輯字符。

+0

是什麼原因在兩種語言中具有不同的代碼點具有相似的外觀字符(我想知道這一點,因爲我必須在不同的編碼之間開發一種轉換實用程序,其中一種是自己的公司自己的專有編碼格式) – Poorna 2009-11-16 10:19:22

+0

@ Sirish:他們是來自不同文化的不同角色,他們可能會遵循不同的規則。例如,西里爾文的「EN」看起來像資本形式的拉丁文「H」 - 但不是小的形式。他們應該被區別對待 - 用來展示他們的字形是偶然的,真的。 – 2009-11-16 10:26:52

+1

@Sirish:它們在兩個不同的*腳本*中看起來很相似,這就是Unicode處理的內容。不是語言,腳本。事實上,西里爾文ES的C形外觀可以追溯到拜占庭時代的特定形式的希臘西格瑪。與拉丁文C的相似性只是附帶的。 – 2009-11-16 10:34:50

8

字母看起來一樣,但有很大的不同。 U + 0043是拉丁字母C,但U + 0421是西裏爾字母С(對應於拉丁字母中的S)。

因爲他們無關的含義,因此,需要不同的代碼點,以防止外殼和排序算法被可怕的上下文相關的 - 你會突然去猜測什麼樣的語言你處理。

2

U+0043C拉丁表示,而U+0421是斯拉夫語,意思是它們實際上不是同一封信中,儘管可能看起來是一樣的。

7

出於同樣的原因,0O看起來是相同的(在大多數單間隔字體中),但編碼方式不同 - 它們表示不同的東西。

+2

+1好比喻:-) – 2009-11-16 10:47:23

+1

我有一臺沒有'1'和'0'的打字機:) – Kornel 2011-04-03 17:13:36

+0

對於一個關於零出現的歷史筆記(或者可能沒有這麼歷史以外的計算機世界),參見* [斜削零](http://en.wikipedia.org/wiki/Slashed_zero)*。 – 2011-09-17 13:48:19

相關問題