Unicode中跟漢字相關的一些內容的總結陳詞


UniHan

這幾天琢磨着怎么方便的給漢字注音因為要知道具體哪些Unicode是給漢字用的就讀了讀Unicode的官方文檔目前unicode已經發展到了7.0. 不看不知道發現Unicode的定義中頗有些有趣的內容寫下了給大家分享下也算是個筆記.

   

Unicode中跟漢字相關統稱為UniHan, 官方文檔在http://www.unicode.org/reports/tr38/

   

其中常用的縮寫叫CJK, 就是中日韓的意思顯然是把三種基於漢語的文字列在一起.

   

此文檔內容講了一大堆基本意思就是說這三種文字是同源的有很多統一的地方也有眾多差異. Unicode中的文字並不是自己發明的或直接研究的成果而都是對各種現有權威資料的匯總和總結比如簡體字主要基於中國的國標什么GB12345除了定義每個字的字形和code point還從其他資料中搜集了其他信息如拼音異體字筆畫,簡單的英文翻譯,部首,康熙字典部首...

   

就拿其中我比較關心的拼音來說, uniHan有一個zipUniHan.zip, ftp://www.unicode.org/Public/zipped/7.0.0/unihan.zip

其中文件UniHan_Readings.txt就包含了各種拼音信息截圖如下:

   

U+6F84就是漢字""code point, 從上面我們可以看到一個英語定義 kDefinition,

用廣東話定義的發音kCantonese, kHanyuPinyin<漢語大字典>中對此字的發音定義; kMandarin描述的是這個字在普通話中最常用的發音(對多音字有意義); 而其他日語韓語的部分我就看不懂了懂行的一看便知.

   

根據文檔TR38記錄, Unicode中的拼音搜集了四種

  • kHanyuPinlu

現代漢語頻率詞典

   

  • kHanyuPinyin

漢語大字典

   

  • kMandarin

常用發音

  • kXHC1983

現代漢語詞典

   

這個只是text格式的比較容易分析其他鏈接還有xml格式的我就不多說了.

   

文章中提到了X,Y,Z三軸的說法大概意思就是說所有的漢字都可以定位在X,Y,Z三個坐標軸上這是為了建立各個文字字形與其含義之間的關系. X軸代表含義,Y軸代表某個具體意思的字的各種字形Z軸就是字形的小變形舉個例子說: "" ""兩個字有完全不同的意思, 所以在X軸上是兩個不同的值; "" 和 ""就是一個意思, 所有他們的X軸的值是相同的, 但由於字形有很大差異, 所以Y的值是不一樣的; 而 """"兩個字X軸Y軸都是一樣的, 但由於其寫法的小差異,他們的Z值是不同的.

   

   

下面說說unihan 中字符的code point分布.

   

簡單的說跟中文有關的有兩個大部分一部分是各種漢字和日韓文字;另一部分是輔助的東西如偏旁部首全字符的英文全字符的標點符號,諸如此類.

   

先說基本的部分:漢字

漢字中最大的一部分叫CJK Unified Ideographs(中日韓統一表意符號集) U+4E00 – 9FCC

   

隨后又有多次補充擴展

CJK Unified Ideographs Extension A

U+3400 – U+4DB5

   

CJK Unified Ideographs Extension B

U+20000 – U+2A6D6

CJK Unified Ideographs Extension C

U+2A700 – U+2B734

CJK Unified Ideographs Extension D

U+2B740 – U+2B81D

在這些extension之外,是幾個為了兼容性而保留的幾個區域

CJK Compatibility Ideographs U+F900 – U+FAD9

CJK Compatibility Supplement U+2F800 – U+2FA1D

(仔細看下面截屏每個字都等價對應到另一個code point)

   

   

說完了漢字后面相關的部分就比較亂了我就隨便猜測了:

CJK Phonetics and Symbols Area 偏旁部首吧  U+2E80-U+2EF3

   

Kangxi Radicals康熙字典里的偏旁部首? U+2F00 – U+2FD5

   

CJK Ideographic Description Characters 用來描述漢字結構的符號,如左右結構,上中下結構等 U+2FF0 - U+2FFB

   

CJK Symbols and Punctuation 符號 U+3000 -303F

   

Bopomofo 老拼音? U+3105-312D, U+31A0 – U+31B7

   

CJK strokes 筆畫 U+31C0 – U+31E3

   

Enclosed CJK Letters and Months 其它奇奇怪怪的東西包括月份等等懷疑有沒有人用啊 U+3220 – U+32CB

   

CJK Compatibility 另外很多奇葩的東西 U+3358-U+33FE

   

再有更過分的我就不都列了如易經八卦,麻將牌之類(是的麻將牌也能進Unicode, 震驚中)

   

其他

說完了UniHan, 說點兒別的相關的首先是平面分布的問題因為目前所有的unicodecode point都分布在 0x10FFFF之間所以簡單粗暴的根據每個字符的最高5bit,分成170層就是0-0xFFFF;1層就是0x10000 =0x1FFFF;2層為0x20000 – 0x2FFFF;以此類推;最后一層(16) 0x100000 – 0x10FFFF. (真的好險層數在多點兒就可以和地獄比比了)

   

Anyway, 漢字主要分布在0,個別分布在2因為幾乎所有人都基本工作在0層的,所以0層又稱為BMP(Basic Multilingual Plane).

   

最后在聊點encoding, windows平台上最常用的是UTF-16, 也就是用16bit為單位來表達unicode. 那么哪些變態的超過0xFFFF的字符怎么辦呢很簡單unicode0-0xFFFF中預留了一塊區域0xD800 – 0xDFFF是不允許任何字符集使用的這部分就被UTF-16用來編碼編碼的方式很簡單超過0xFFFF的字符最大是16層的0x10FFFF, 21所以不管三七二十一所有大於0xFFFF的字符在編碼前先減去0x10000, 這樣的結果就是最多只有20位了然后一分二分為高10位和低10;10為與0xD800或一下得到的結果就是在0xD8000xDFFF之間lead surrogate或者high surrogates; 10位與0xDC00或一個(就是做個加法), 得到的結果就是trail surrogatelow surrogates. 搞定.

   

多加一句所謂的UCS-2UTF-16的前身, UCS最大只支持到0xFFFF, 他的字符是定寬的沒有surrogate一說它不能表達unicode的所有字符.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM