获取Windows操作系统能够支持的locale

PostgreSQL目前并不支持 GB2312,也不支持GBK,唯一支持的中文字符集似乎只有EUC_CN。所以我们在创建 数据库时一般选择 Encoding 为 UTF-8,为了支持中文,在Linux下locale选择 zh_CN.utf8(Linux),在 Windows 下选择 Chinese_China 或者 Chinese_People's Republic of China。
阿弟(陈爱生)测试过速度问题,选择 C 会比选择中文快好几倍,他建议选C,处理中文时再convert,有时间我会着手调查一下有没有解决方案。

PG 对 locale 处理依赖于操作系统,对 开源社区来说这是不错的解决办法,至少节省大量精力,但是也有弊端,比如字符排序在不同操作系统会有不同表现。初始化时,我们不得不选择当前操作系统能够支持的locale,如果是手动操作,对于 Windows 可以打开区域设置看看我们 安装了哪些支持,对于 Linux 使用locale 命令即可。
如果制作安装程序,则必须给用户一个可用 locale 列表(当然不考虑界面友好性,可以给用户一个文本框输入。 01104349_cJ4C.gif),下边讲讲如何使用 Windows API获取当前系统支持的 locale。

函数 EnumSystemLocales,第一个参数是回调(callback)函数,第二个参数是枚举标志,这里我们应该使用 LCID_INSTALLED 枚举所有已安装 locale。
具体说明见:
EnumSystemLocales function

关于第一个参数回调函数,使用方法见:
EnumLocalesProc callback function

EnumSystemLocales每次调用会把locale 标识符以字符串的形式传入,我们首先将它转换为数字形式。随后以 GetLocaleInfo 函数查询 locale 信息,使用 LOCALE_SENGCOUNTRY 和 LOCALE_SENGLANGUAGE 得到它的英文国家与语言名称,这里是 GetLocaleInfo 函数可以获取的信息列表:
Locale Information Constants

转载于:https://my.oschina.net/quanzl/blog/134955

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值