[open source] 拼音排序函數庫發布
最近在做資源管理器的設計,SPEC要求中文文件名按拼音排序。于是花了點時間去研究關于拼音排序的問題,然后又花了兩小時寫了一個函數庫。其實知道了原理,按拼音排序的實現很簡單,放到這里供大家參考吧。
我們知道,計算機中的每一個字符都有一個內碼。在默認情況下,計算機排序時,比較兩個字符的大小就是比較字符內碼的大小,這對于英文來說沒有問題,因為英 文字母的內碼是按字母順序遞增的。對于中文來說,就比較麻煩了:首先,中文的排序方式有多種,比如按內碼排序、按拼音排序和按筆畫排序,要通過參數指定排 序的方式,否則計算機就按內碼排序了。其次,漢字的內碼順序即不同于拼音順序,也不同于按筆畫順序。在GB2312編碼中,漢字基本上按拼音排序(據說有例外,不太清楚)。在GBK中,它在GB2312基礎上進行了擴充,兼容GB2312中的所有字符,所以不是按拼音排序了。在Unicode中,漢字的排列似乎更沒有什么規律可言了。
為了解決內碼順序與用戶習慣順序(如拼音順序)的沖突,在glibc的locale數據里,要求提供排序方式(collate)的描述。我看了一下glibc-2.3.5提供的locale數據,在簡體中文(zh_CN)的locale數據描述里,關于排序方式的描述如下:
% ISO 14651 collation sequence
LC_COLLATE
copy "iso14651_t1"
END LC_COLLATE
也就是說,照抄iso14651_t1的排序方式。打開
新聞熱點
疑難解答