[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [I18n] Simple input methods for X11 available (fwd)



:        我之前所提的簡單的說,就是做各種內碼的轉換,之所以提出”輸入法 
:        內部字元集”是因為,不論採用何種編碼(UCS-4),都會遇到缺字的問題 
:        ,也就是在 A 字元集有 aa,而 B 字元集卻沒有 aa,就算選擇 UCS-4  
:        當內碼也不是萬靈丹,畢竟 UCS-4 沒定的字,沒有就是沒有,所以一  
:        由另一套字元集轉成 UCS-4 時,掉字是可想而知的,所以讓使用者有  
:        選擇自己喜歡的字元集當核心是比較好的,或者在做內碼轉換時, aa     
:        由 A => B => C 時,萬一 B 缺了 aa 這個字,最後轉到 C 時,只要  
:        C 定這 aa 這個字,也應該要能轉換成功,或者,如果你假設 UCS-4
:        一定是各字元集的 superset ,那上述的問題也就不會發生囉。。:)

您說的沒錯,這是下一版 xcin 的重要目標之一。事實上,我們打
算將這些部分做成一個 lib, 定好適當的 API, 讓所有需要做東方
語系 (特別是中文) 字集轉換的應用程式都可以呼叫使用。

本來這些字集轉換的工作是要交給 libc 的 iconv() 來做的,但我
們發現 iconv() 恐怕不符使用,因此才想說寫一個獨立的 lib 來
用。主要正是因為掉字的問題。一個功能正常的 iconv(), 只要是
A 字集與 B 字集的轉換管道可以開啟成功時,則一定可以保證 A 字
集每個字都可以轉到 B 字集的字上去,反之亦然,不論它是用什麼
方法轉的。然而,問題出在 A B 兩字集萬一大小不一樣時。假設 A
字集大於 B 字集,則很可能 A 中 a1, a2 兩字都對到 B 字集的 b1,
反之 B 字集的 b1 只能對到 A 字集的 a1, 則:

	a2 ==> b1 ==> a1

a2 這個字轉過去再轉回來就不見了 (變成 a1 了),也就是所謂的掉
字問題。這是 iconv() 先天的限制。但做為一個輸入法,我們應該要
提供機會讓使用者在打 b1 時,可以選擇要以 a1 或 a2 來輸出。因此,
我們需要一個新的 lib 與 API。


T.H.Hsieh



Reply to: