RHEL5.4对中文排序问题

 

今天德哥发现 rhel5.4上使用sort对中文进行拼音排序,而在rhel6中是正常的。现象如下:
[root@rhel5-2 ~]# locale
LANG=zh_CN.utf-8
LC_CTYPE=zh_CN.utf-8
LC_NUMERIC="zh_CN.utf-8"
LC_TIME="zh_CN.utf-8"
LC_COLLATE=zh_CN.utf-8
LC_MONETARY="zh_CN.utf-8"
LC_MESSAGES="zh_CN.utf-8"
LC_PAPER="zh_CN.utf-8"
LC_NAME="zh_CN.utf-8"
LC_ADDRESS="zh_CN.utf-8"
LC_TELEPHONE="zh_CN.utf-8"
LC_MEASUREMENT="zh_CN.utf-8"
LC_IDENTIFICATION="zh_CN.utf-8"
LC_ALL=
[root@rhel5-2 ~]# cat test
中国
日本
美国
上海
[root@rhel5-2 ~]# sort test
上海
中国
日本
美国
[root@rhel5-2 ~]# rpm -qa|grep glibc
glibc-common-2.5-42
glibc-devel-2.5-42
glibc-2.5-42
glibc-headers-2.5-42
这其实是因为中文本地化数据并没有包含拼音排序的信息。即glibc中的local数据不包含对中文按拼音和笔画的排序
官方上 bug的提交如下:
http://sources.redhat.com/ml/glibc-bugs/2007-02/msg00068.html
http://sourceware.org/bugzilla/show_bug.cgi?id=4024
现在给出解决方案,如下:
现在通过安装一种额外的中文本地化数据 zh_CN@pinyin就可以让你在UTF-8和GB18030字符集下都可以正确的排序中文。 即locale-pinyin
介绍
==
按拼音排序的中文locale。
在类Unix中为了能够正确的排序电脑中的中文,你必须有能够正确对中文进行排序
的locale数据。而glibc包含的locale数据一直没能对中文按照拼音或者笔画排
序。本软件则是为你在电脑中增加一种按照拼音排序的中文locale。
安装
==
系统需求:
1、系统需要有符合X/Open标准的localedef工具
2、5.8.1以上的perl
安装:
$make
#make install
配置
==
为了生效,你必须正确配置locale环境变量。
推荐仅设置LC_COLLATE为本locale,比如:
LANG=zh_CN.UTF-8
LC_COLLATE=zh_CN@pinyin.utf8
注意:不要同时设置LC_ALL和LC_COLLATE,这样可能会导致本locale不能正确生
效。
再跟踪 glibc,发现官方在比较新的版本中已经把local_pinyin合并进去了(glibc2.6以上),如下:
http://sourceware.org/cgi-bin/cvsweb.cgi/libc/localedata/locales/iso14651_t1_pinyin?rev=1.1&content-type=text/x-cvsweb-markup&cvsroot=glibc
升级 glibc是一个比较大的工程,涉及也比较广,建议在用rhel5时先打上local_pinyin补丁,或者可以考虑使用rhel6

你可能感兴趣的:(问题,中文排序,RHEL5.4)