Unicode
Unicode 是一個勇敢的嘗試,它試圖用一個字符集涵蓋這個星球上的所有書寫系統(tǒng)。一些人誤以為Unicode只是簡單的使用16比特的碼字,也就是說每一個字符對應 16比特,總共可以表示65536個字符。這是完全不正確的。不過這是關于Unicode的最普遍的誤解,如果你也這樣認為,不用感到不好意思。
事實上,Unicode使用一種與之前系統(tǒng)不同的思路來考慮字符,如果你不能理解這種思路,那其他的也就毫無意義了。
到現(xiàn)在為止,我們的做法是把一個字母映射到幾個比特,這些比特可以存儲在磁盤或者內存中。
A -> 0100 0001
在Unicode中,一個字母被映射到一個叫做碼點(code point)的東西,這個碼點可以看作一個純粹的邏輯概念。至于碼點(code point)如何在內存或磁盤中存儲是另外的一個故事了。
在Unicode中,字母A可看做是一個柏拉圖式的理想,僅存在于天堂之中:(我的理解是字母A就是一個抽象,世界上并不存在這樣的東西,如果數(shù)學里面的0、1、2等一樣)
A
這個柏拉圖式的A與B不同,也與a不同,但與A和A相同。這個觀點就是Times New Roman字體中的A與Helvetica字體中的A相同,與小寫的"a"不同,這個應該不會引起太多的異議。但在一些語言中,如何辨別一個字母會有很大的爭議。比如在德語中,字母 ß是看做一個完整的字母,還是看做ss的一種花式寫法?如果在一個字母的形狀因為它處在一個單詞的末尾而略有改變,那還算是那個字母嗎?阿拉人說當然算了,但希伯來人卻不這么認為。但無論如何,這些問題已經(jīng)被Unicode委員會的這幫聰明人給解決了,盡管這花了他們十多年的時間,盡管其中涉及多次政治味道很濃的辯論,但至少現(xiàn)在你不用再為這個操心了,因為它已經(jīng)被解決。
每一個字母系統(tǒng)中的每一個柏拉圖式的字母在Unicode中都被分配了一個神奇的數(shù)字,比如像U+0639。這個神奇數(shù)字就是前面提到過的碼點(code point)。U+的意思就是"Unicode",后面跟的數(shù)字是十六進制的。U+0639表示的是阿拉伯字母Ain。英文字母A在Unicode中的表示是U+0041。你可以使用Windows 2000/XP自帶的字符表功能或者Unicode的官方網(wǎng)站(www.unicode.org)來查找與字母的對應關系。
事實上Unicode可以定義的字符數(shù)并沒有上限,而且現(xiàn)在已經(jīng)超過65536了。顯然,并不是任何Unicode字符都可以用2個字節(jié)來表示了。
舉個例子,假設我們現(xiàn)在有一個字符串:
Hello
在Unicode中,對應的碼點(code point)如下:
U+0048 U+0065 U+006C U+006C U+006F
瞧,僅僅是一堆碼點而已,或者說數(shù)字。不過到現(xiàn)在為止,我們還沒有說這些碼點究竟是如何存儲到內存或如何表示在email信息中的。
出處:
責任編輯:bluehearts
上一頁 關于字符集和Unicode的相關知識 [2] 下一頁 關于字符集和Unicode的相關知識 [4]
◎進入論壇網(wǎng)絡編程版塊參加討論
|