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

UniHan windows

這幾天琢磨着怎麼方便的給漢字註音由於要知道具體哪些Unicode是給漢字用的就讀了讀Unicode的官方文檔目前unicode已經發展到了7.0. 不看不知道發現Unicode的定義中很有些有趣的內容寫下了給你們分享下也算是個筆記. 編碼

   

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

   

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

   

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

   

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

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

   

U+6F84就是漢字""code point, 從上面咱們能夠看到一個英語定義 kDefinition, blog

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

   

根據文檔TR38記錄, Unicode中的拼音蒐集了四種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的全部字符.

相關文章
相關標籤/搜索