Differences between revisions 2 and 3
Revision 2 as of 2009-11-28 14:39:38
Size: 2217
Editor: Elias
Comment: 删除对PageComment2组件的引用
Revision 3 as of 2009-12-25 07:16:38
Size: 2223
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 6: Line 6:
::-- ZoomQuiet [[[DateTime(2007-07-26T05:02:53Z)]]]
[[TableOfContents]]
::-- ZoomQuiet [<<DateTime(2007-07-26T05:02:53Z)>>]
<<TableOfContents>>
Line 9: Line 9:
[[Include(CPUGnav)]] <<Include(CPUGnav)>>
Line 31: Line 31:
 * 下载: [https://gro.clinux.org/frs/download.php/1962/locale-pinyin-0.1.tar.gz locale-pinyin-0.1.tar.gz]
  * 本地下载: attachment:locale-pinyin-0.1.tar.gz
 * 下载: [[https://gro.clinux.org/frs/download.php/1962/locale-pinyin-0.1.tar.gz|locale-pinyin-0.1.tar.gz]]
  * 本地下载: [[attachment:locale-pinyin-0.1.tar.gz]]

Python拼音排序的支持 ::-- ZoomQuiet [2007-07-26 05:02:53]

CPUG联盟::

CPUG::门户plone

BPUG

SPUG

ZPUG

SpreadPython Python宣传

1. Python拼音排序

{{{Hong Yuan <[email protected]> hide details 12:07 pm (13 minutes ago)

}}}

1.1. 背景

前几天列表中讨论过这个话题,最近自己研究了一下,和大家分享一下,请大家补充。

另外有谁知道如何在Windows下添加locale的,请给个提示。

1.2. 拼音排序的支持

Python内置的字符串比较并未考虑locale信息,其标准库locale库也没有提供能按拼音排序的LC_COLLATE,排序完全交给操作系统的locale完成。有一些项目提供了不完全的拼音支持,如ZopeChinaPak中提供了GB2312编码到拼音的转换,可以以此为基础写一个比较函数。

比较好的方法是通过locale,由于没有标准的支持中文排序的locale,有人自己编写了一个locale-pinyin(http://www.cublog.cn/u/8057/showart_245534.html),能够实现这个功能,目前据说已经整合进了标准的glibc库。下载地址是:

不过这个locale只能在Linux下编译,不知道如何在Windows下使用。以下为Linux下使用的例子:

1.2.1. 使用

  1. 解开locale-pinyin安装包,运行make,然后make install
  2. 运行以下测试程序,可以看到其效果:

      # -*- coding: utf-8 -*-

      import locale
      a, b = u'小学'
      print a < b
      print locale.strcoll(a, b)
      locale.setlocale(locale.LC_COLLATE, '[email protected]')
      print a < b
      print locale.strcoll(a, b)

可见即使strcoll可以正确使用拼音进行比较,标准的字符串比较和排序函数并不能从中得益,需要自己写比较函数。

1.3. 反馈

MicroProj/2007-07-26 (last edited 2009-12-25 07:16:38 by localhost)