題主是非專業人員,只是遇到了不少與字元編碼有關的事情,才稍微有一些瞭解,順便也瞭解了一些文字學知識。希望相關專業人士做個解答:)

ps:不考慮不同系統對於unicode轉換格式的處理,只考慮unicode層面1. 如題,unicode有沒有資格統一字元編碼(尤其是涉及到漢字這種語素文字)?目前的發展情況怎樣?受到主要國家的支持還是反對?(好像新版vs逐漸採用unicode?)

2.關於中日韓漢字中同部分源而書寫稍有不同的漢字,unicode全部收錄,並賦予同樣編碼,僅用字體不同以示區別,這個說法正確嗎?那字形庫和字體有什麼聯繫呢?對於這種漢字(比如「畫」,「戶」,在中日寫法都有小區別)unicode編碼矩陣裡面到底收錄了幾個字形(同一個編碼)?假如字形是唯一的,那字體怎麼工作來區分不同寫法呢?還是說同一unicode漢字編碼對應多個字形

3.對於上述同源而書寫稍有不同的漢字,unicode現存的解決方案似乎有不少批評?有否替代方案? 關於這個問題,題主的認識如下:根據維基百科-Unicode字元平面映射wikipedia.org 的頁面,題主粗淺的理解是,unicode編碼矩陣是作為「平面」的連續的4位16進位編碼(一維矩陣,0000-FFFF)+17個平面(假設編為0-16),也就是說,是一個二維平面矩陣,記為U+XXXX(這裡有個導致歧義的地方,維基百科上將0000-FFFF的一維矩陣寫成了二維矩陣的形式,但是實際上一個平面應該還是一維矩陣吧)。如果對於同源異形的漢字,unicode全部收錄(且為同一編碼,對於未統一編碼的同源異形字不考慮),那為什麼不在一開始就將矩陣定義為3維的呢?多用一維來代表同源異形字,使任何字元均有唯一的3維坐標(U,XXXX,M),舉個例子,

不考慮題主瀏覽器能不能正確顯示所有字形,看起來「房」有3種不同寫法,但是為了統一,不考慮歸類相同的寫法,而為所有寫法賦予唯一的三維矩陣坐標,假設大陸,香港,臺灣,日本,韓國,越南等有漢字的國家依次記為0-M,大陸「房」的Unicode碼記為(0,623F,0),而香港的「房」記為(0,623F,1),依次類推,這樣,同源字實際上全部在一個長度為M的一維矩陣中,這樣似乎就可以解決同源異形字的困難?

關於上述方法合理性的解釋:其一,Unicode字元編碼矩陣的最大意義在於,任何文字體系都能不依賴於轉換編碼而正確顯示在任何Unicode環境中,而儘可能統一漢字編碼以簡化Unicod矩陣只能算是次要的目標;其二,Unicode第0平面是主要使用的字符集,而其中作為語素文字的漢字字元數量比其他音節文字(其他大多數文字,都有字母表或者類似的東西,包括輔音音素文字,全音節文字,母音附標文字,音節文字等)多得多,為了更準確地記錄佔比例如此之高的漢字,擴大Unicode矩陣有意義;其三,儘管提高維度的方法會大幅度增加Unicode矩陣的大小,但是就目前的文字發展情況而言,可以有很多折中的解決方案來抑制矩陣大小的增加。比如說,針對尚無任何計劃的第4-16平面,採用預設設置減少矩陣體積(尤其是寫入內存時的體積,編碼和內存中物理地址的關係不太清楚)。未來隨實際需求再增加即可;

其四,這種文字處理方法會顯著增加計算設備的負擔,但是目前計算設備性能普遍過剩,額外的計算量不一定那麼明顯。此外,還應該考慮到計算能力的快速發展。

題主認為,類似的想法應該早有人提過,但是既然未付諸實踐,那就應該有某些問題,題主並不想對不熟悉的領域指手畫腳,只是單純想知道自己的想法有什麼疏忽,希望相關人士解答。PS:貌似Unicode連甲骨文,小篆和金文都要收錄。。。看來還真是縱貫古今啊


這段東西疏忽太多了,稍提幾點。

  • Unicode Standard 是字符集標準而非編碼標準。題主混淆了二者,所以一錯錯一串。
  • Unicode Standard 從未將不同「文種」視作同一「書寫系統」加以編碼。題主只看到了碼錶,所以不瞭解文種編碼設計間的差異。
  • @田中四郎 的說法有點問題,一是混淆了「代碼」和「編碼」,二是政府層面的確存在區分異寫字的需要。早期漢字不具備系統的認同原則,「誤認同對」和「誤區分對」禁止被視作指導目前認同工作的標準。按《核心規範》所談,同源且具有「相同抽象字形」的字應被置於同一碼位,因而如 @Belleve 所談,一方面靠 IVD,另一方面有 Opentype 特性用於解決混排情形。
  • 所謂「矩陣」是用來具象解釋的,和字符集的編碼實現完全無關。注意到 ISO/IEC 10646 對「平面」的定義是為「從 0 開始的每 65536 個碼位稱為 1 個平面」。@愛喫杏仁 建立的所謂「3 維矩陣模型」類似 IVD,但因為混淆了字符集和編碼,完全脫離實際。
  • 所謂「計算」頂多是「異體字關聯」,可以論證「異體字」甚至「異寫字」都不一定可被樹結構化,顯然應靠上層應用而非編碼層面實現。同理,可以論證已知任何序列規則都無法適應異體字關聯,反而可能破壞已有的設計優勢,或者導致一字多碼的混淆。

綜上,勸題主多加學習。


三維矩陣,你說的是 IVS?目前 Unicode 編了 256 個 Variant selector,字體支持的話就可以直接用 IVS 調出變體,很簡單的 cmap trick


因為這件事字體幹了。本來是一個字,寫法有細微的差異,為什麼要分配不同的代碼呢?你仔細想想,考慮到實際使用的場合,其實根本沒有分配不同代碼的必要,目前的代碼統一不同字體字形不同的方案已經很好了。

你又不是孔乙己……


推薦閱讀:
相關文章