參考
<a href="http://www.th7.cn/db/oracle/2011-06-30/8490.shtml">http://www.th7.cn/db/oracle/2011-06-30/8490.shtml</a>
很多語言,包括英語在内,都使用沉音字元(accented character)。
因為這些字元不屬于 ascii 字元集,是以假如不檢視 unicode 值也不使用 unicode 編輯器并将其轉成一個已知字元集,就很難編寫使用這些字元的代碼。
oracle9i 引入了 compose 函數,該函數接受一串 unicode 字元并規則化其文本。
這就意味着它可以接受一個字母和一個組合标記,比如說‘a'(unicode 字元0097)和沉音符(unicode 字元0300),然後建立一個單獨的由兩個标記組合而成的字元。
compose 使用非凡的組合标記,而沒有使用 ascii 中相應的音節标記,它所使用的非凡的組合标記是 unicode 标準 的一部分。上面的例子的結果應該是 unicode 字元00e0(有一個沉音符的小寫拉丁字母‘a')。
在 ansi 中最常見的組合字元有: u+0300:沉音符(grave accent)( ` )。 u+0301:重音符(acute accent)( ' )。 u+0302:抑揚音符号(circumflex accent)(^)。 u+0303:颚化符号(tilde)(~)。 u+0308:元音變音 ?。
假如沒有非凡的軟體或者鍵盤驅動程式的話,很難在鍵盤上輸入 unicode 字元0097和0300。是以,以純 ascii 文本輸入 unicode 序列的一個方法是使用 unistr 函數。
這個函數接受一個 ascii 字元串然後以國家字元集(通常作為16位 unicode 或者 utf-8 字元集安裝)建立一個 unicode 字元的序列。
它使用十六進制占位符序列映射任何非 ascii 字元,映射方式與 java 類似。
要輸入a後接一個沉音符組合字元的序列,可以使用 unistr(‘a300'),而不要試圖直接在代碼中輸入字元。
這個函數在任何字元集以及任何具有基于 unicode 的國家字元集的資料庫下都可以正常運作。
可以将多個組合字元放在函數中――可以在 unistr 函數中混合使用 ascii 和 unicode 占位符。
例如,可以像下面這樣使用 unistr 函數:
在将 unistr 函數的輸出與 compose 組合時,可以在不查找任何值的情況下生成一個 unicode 字元。
例如:
unistr用法
輸入編碼得到unicode編碼的字元
<a href="http://docs.oracle.com/cd/b19306_01/server.102/b14200/functions204.htm">http://docs.oracle.com/cd/b19306_01/server.102/b14200/functions204.htm</a>
unistr(string)
compose用法
将兩個unicode編碼的字元合成,例如字母與沉音符合成為另一個unicode字元
<a href="http://docs.oracle.com/cd/b19306_01/server.102/b14200/functions025.htm">http://docs.oracle.com/cd/b19306_01/server.102/b14200/functions025.htm</a>
compose(char)
decompose用法
将帶有合成字元的字元串,解析成合成前的unicode字元串
<a href="http://docs.oracle.com/cd/b19306_01/server.102/b14200/functions041.htm">http://docs.oracle.com/cd/b19306_01/server.102/b14200/functions041.htm</a>
decompose(string)
自定義映射關系
需要使用者自定義合成字母與字母,unicode沉音符的映射關系, 進行編碼後存在表或者代碼中。
自定義函數
基于對應關系的編碼,合成,或解碼字元串。
<a href="http://unicode-table.com/cn">http://unicode-table.com/cn</a>
<a href="http://info.flagcounter.com/h9v1">count</a>