Linode系列之三:Unicode与中文支持

(0 comments)

操作系统和大多数程序利用locale来确定特定的国家和语言设置,这些locale以及它们包含的数据是系统库的一部分,可以在大多数系统中的/usr/share/locale目录下找到。Locale的名称通常命名为ab_CD.EFG的形式,其中ab是两个(或三个)字母的语言代号(例如:zh),CD是两个字母的国家代号(例如:CN),EFG是字符集,例如en_US.UTF-8或zh_CN@GBK。

Locale由系统环境变量来设置,系统全局设置在/etc/env.d/02locale或者特定用户设置在~/.bashr文件中。这些变量包括:

LANG
一次性定义全部locale设置,但是允许通过下面的LC_*设置进一步作单项定制。 

LC_COLLATE 
定义字符串的字母排序方式。例如这会影响目录列表的分类显示。 

LC_CTYPE
定义系统的字符处理性能。这决定哪些字符能被视为字母、数字,等等。这个变量如果生效还决定所使用的字符集。 

LC_MESSAGES
使用基于消息机制的本地化方式的应用程序的本地化信息(绝大多数GNU程序皆属此类,请看下面的章节以获知如何让支持以及不支持此机制的程序本地化)。 

LC_MONETARY
定义货币单位和货币型数值的格式。

LC_NUMERIC
定义非货币型数值的格式。影响到千位分隔符和小数分隔符等。 

LC_TIME
定义日期和时间的格式。 

LC_PAPER
定义默认的纸张尺寸。 

LC_ALL
一个用于覆写所有其它设置的特殊变量。

注意:LC_ALL设置之后不可被覆写,因此强烈反对使用,并且决不要把它设置在启动文件中。 

为了支持中文,可以选择UTF-8或者GBK编码,UTF-8的通用性更好一些,所以选择了UTF-8作为系统默认编码。在 /etc/env.d/02locale 文件中添加如下设置:

export LANG=en_US.UTF-8
export LC_CTYPE="zh_CN.UTF-8"

更新系统全局默认的locale:

env-update && source /etc/profile

检验系统更改后的locale:

# locale
LANG=en_US.UTF-8
LC_CTYPE=zh_CN.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

然后,生成常用的locale文件,在/etc/locale.gen中指定所需的的locale:

en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN GB18030
zh_CN.GBK GBK
zh_CN.GB2312 GB2312
zh_CN.UTF-8 UTF-8

下一步是执行locale-gen。它会生成/etc/locale.gen文件中指定的所有locale。

Currently unrated

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required