我可以在Unicode中看到一些重複的字符。例如,字符'C'可以由代碼點U + 0043和U + 0421表示。這是爲什麼?爲什麼Unicode中有重複的字符?
回答
正如其他人所指出的,這裏的主要謬誤是混淆了拉丁語和西里爾文腳本以及其中的一些字形(即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'。你真的不想通過外觀來映射這些角色。
如果你看一下U+0400 to U+04FF code chart你會發現,U + 0421是西里爾大寫福斯產品「ES」。它可能是看起來像一個拉丁語C,但它是一個不同的邏輯字符。
字母看起來一樣,但有很大的不同。 U + 0043是拉丁字母C,但U + 0421是西裏爾字母С(對應於拉丁字母中的S)。
因爲他們無關的含義,因此,需要不同的代碼點,以防止外殼和排序算法被可怕的上下文相關的 - 你會突然去猜測什麼樣的語言你處理。
U+0043
是C
拉丁表示,而U+0421
是斯拉夫語,意思是它們實際上不是同一封信中,儘管可能看起來是一樣的。
出於同樣的原因,0
和O
看起來是相同的(在大多數單間隔字體中),但編碼方式不同 - 它們表示不同的東西。
+1好比喻:-) – 2009-11-16 10:47:23
我有一臺沒有'1'和'0'的打字機:) – Kornel 2011-04-03 17:13:36
對於一個關於零出現的歷史筆記(或者可能沒有這麼歷史以外的計算機世界),參見* [斜削零](http://en.wikipedia.org/wiki/Slashed_zero)*。 – 2011-09-17 13:48:19
- 1. 什麼是unicode字符串?
- 2. 爲什麼在T-SQL中一些unicode字符等於沒有?
- 3. 爲什麼我的字典中的Unicode字符未打印?
- 4. 爲什麼在重寫URL中重複查詢字符串?
- 5. 爲什麼允許密碼中的重複字符不安全?
- 6. unicode字符或多字節字符:哪種類型更有效?爲什麼?
- 7. 字符中間的大子彈的Unicode字符是什麼?
- 8. 爲什麼Unicode字符間存有句點?
- 9. 什麼是位置的unicode字符?
- 10. 爲什麼「Hearts」符號的Unicode字符不能通過HTML
- 11. Unicode字符串爲Unicode字符,Python 3
- 12. 什麼是印地文重音字符的unicode範圍?
- 13. 爲什麼我有重複的月數
- 14. 爲什麼NSMutableArray有重複的對象?
- 15. 爲什麼重複打印換行符?
- 16. 爲什麼我不能在python中交換unicode字符
- 17. 爲什麼一些Unicode字符在Emacs中不可見?
- 18. 爲什麼要在python中通過字符串聲明unicode?
- 19. 爲什麼unicode字符在列表中顯示編碼?
- 20. VBA隨機生成的字符串重複 - 爲什麼?
- 21. Unicode 2字節重複
- 22. 什麼是€符號的unicode
- 23. 我的重複數據字符串有什麼問題?
- 24. 什麼是以下Unicode字符串\ xe9?
- 25. 什麼Unicode字符代表「時間」?
- 26. unicode字符 代表什麼?
- 27. 什麼是unicode隱形字符?
- 28. 爲什麼Python輸出的字符串和unicode的值相同?
- 29. 爲什麼VkKeyScanW爲unicode字符返回-1?
- 30. 爲什麼Unicode字符表中有空格,如何檢查unicode值是否是其中的一個?
是什麼原因在兩種語言中具有不同的代碼點具有相似的外觀字符(我想知道這一點,因爲我必須在不同的編碼之間開發一種轉換實用程序,其中一種是自己的公司自己的專有編碼格式) – Poorna 2009-11-16 10:19:22
@ Sirish:他們是來自不同文化的不同角色,他們可能會遵循不同的規則。例如,西里爾文的「EN」看起來像資本形式的拉丁文「H」 - 但不是小的形式。他們應該被區別對待 - 用來展示他們的字形是偶然的,真的。 – 2009-11-16 10:26:52
@Sirish:它們在兩個不同的*腳本*中看起來很相似,這就是Unicode處理的內容。不是語言,腳本。事實上,西里爾文ES的C形外觀可以追溯到拜占庭時代的特定形式的希臘西格瑪。與拉丁文C的相似性只是附帶的。 – 2009-11-16 10:34:50