UNIX 文字工具: 中文排序的問題

甚至有些 UNIX 系統內附的 sort 指令,根本無法正確處理高拜 (數值 > 127 的 byte 位元組)。 所以,這些 sort 無法正確為 Big-5 中文碼排序。

如果 sort 指令可以接受高拜,則形式上, 我們可以用 sort 指令來為 Big-5 碼的中文文字檔排序。 sort 不管檔案內容是什麼字碼,反正它就是按照一個 byte 一個 byte 的號碼來排序。 這樣的結果差強人意,但是詳細來看是有問題的。 每個 Big-5 碼有首碼與次碼。凡是首碼比較小的字,就必定排在前面。 但是 Big-5 碼的排列方式,是把中文分成常用與次常用兩堆。 常用字的首碼總是比次常用字的首碼小。 因此,筆畫多的常用字,例如「圍」,總是排在筆畫少的次常用字前面,例如「囗」。 嚴格來說,這樣的排序結果就錯誤了。因為,一般而言,中國字的排序方法應該是:

  1. 比筆畫數
  2. 筆畫數相同者,比部首序 (部首序按照康熙字典之順序)
          或者
    筆畫數相同者,比拼音 (按照漢語拼音符號在英文字母中的順序)
  3. 前二者皆同者,比字碼
根據這套定義,中國字的排序程式必須另外寫,而且必然和字碼表的設計有關。 我們雖然知道這個現象,卻還沒有著手寫一個正當的中文排序工具。

倘若使用的字碼是 CNS,效果應該比 Big-5 稍好一點。 因為 CNS 本身的錯誤,比 Big-5 少。 但是基本的困難仍然存在。 倘若使用的字碼是 Unicode,問題就更嚴重了。 因為 Unicode 只是交換碼,它的設計完全沒有考慮到排序的需要。 因此在 Unicode 字碼表上,中國字的編號和筆畫數、發音、部首, 可以說基本上沒有關係。 詳情請看本教材中 Unicode 的專文。

讀者必需自己做實驗,才能確定您的 sort 指令是否可以做差強人意的中文排序。

習題

[ 前一節 ]‧[ 後一節 ]‧[ 回目錄 ]



注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。

Created: Nov 19, 2000
Last Revised: Nov 19, 2000
© Copyright 2000 Wei-Chang Shann 單維彰

shann@math.ncu.edu.tw