CentOS字符集详解
一、字符编码和字符集
1. 字符编码(Character Encoding)
字符编码是一种法则,用于在数字与符号之间建立对应关系,不同的国家有不同的语言,包含的文字、标点符号、图形符号各有不同,在ASCII编码中,用数字97表示字符'a',常见的字符编码有ASCII、GBK、GB18030和Unicode等。
1.1 ASCII编码
ASCII编码是最早的字符编码之一,主要用于显示现代英语和其他西欧语言,它基于拉丁字母,每个字符占用一个字节,共128个字符。
1.2 GBK编码
GBK编码是一种汉字编码标准,兼容GB2312,并扩展了更多汉字,它在双字节字符集中使用频繁,适用于简体中文。
1.3 GB18030编码
GB18030编码是对GBK的扩展,增加了更多的汉字和符号,它使用变长多字节方式编码,可以表示几乎所有汉字。
1.4 Unicode编码
Unicode编码旨在涵盖世界上所有书写系统的字符,其常见变种包括UTF8、UTF16和UTF32:
UTF8:兼容ASCII编码,对英文字符使用一个字节,对其他字符使用2到4个字节。
UTF16:基本多文种平面使用两个字节,辅助平面使用四个字节。
UTF32:所有字符均使用四个字节表示,空间利用效率低。
2. 字符集(Character Set)
字符集是字符的集合,每个字符集包含的字符个数不同,常见的字符集名称包括ASCII、GB2312、GBK和UTF8等。
2.1 ASCII字符集
ASCII字符集包含控制字符和可打印字符,主要用于英语和其他西欧语言。
2.2 GB2312字符集
GB2312字符集包含大部分常用的简体汉字,已不能满足现代需求。
2.3 GBK字符集
GBK字符集是GB2312的扩展,增加了更多汉字和符号。
2.4 UTF8字符集
UTF8是一种针对Unicode的可变长度字符编码,广泛用于互联网数据传输。
国际编码(Unicode)
为了解决传统字符编码方案的局限,Unicode于1994年发布,Unicode统一了全球所有字符的编码,不再存在字符集不兼容和字符转换的问题。
二、汉字的编码
汉字的编码
支持汉字(简体中文)的编码有GB2312、GB13000、GBK、GB18030和Unicode(UTF8、UTF16、UTF32)。
1.1 GB2312编码
GB2312编码仅包含大部分常用简体汉字,已不能适应现代需求。
1.2 GB13000编码
由于GB2312的局限性,国家标准化委员会制定了GB13000编码,但由于兼容性问题未广泛推广。
1.3 GBK编码
GBK编码在GB2312基础上扩展,包含了更多汉字和符号,得到广泛应用。
1.4 GB18030编码
GB18030编码进一步扩展了GBK,增加了数千个汉字,但因使用变长多字节编码给软件开发带来难度。
1.5 Unicode编码
Unicode包含全世界所有国家需要的字符,是国际编码,通用性强。
汉字的编码选择
在操作系统和数据库中,常用的汉字编码有GBK、GB18030和Unicode,GBK和GB18030的优势在于占用空间小,而Unicode的优势在于全球化支持。
2.1 GBK和GB18030的优势
空间利用率高。
适用于简体中文环境。
2.2 Unicode的优势
全球化支持。
统一编码标准,消除乱码问题。
编码的转换
GBK和GB18030与Unicode编码之间需要转换,否则会出现汉字乱码,Linux提供了iconv命令进行编码转换。
三、设置Linux的字符集
查看当前系统已安装的字符集
使用locale命令查看当前系统全部已安装的字符集。
locale a
安装中文字符集
如果系统没有安装中文字符集,可以用以下命令安装:
yum groupinstall "fonts" y yum install kdel10nChinese y yum reinstall glibccommon y
安装完成后,可以通过以下命令查看已安装的中文字符集:
locale a | grep zh_CN
修改字符集配置文件
CentOS 7的字符集配置文件位于/etc/locale.conf,可以使用vi命令编辑该文件:
vi /etc/locale.conf
将文件中的相关语句修改为所需的字符集,如:
LANG="zh_CN.UTF8"
保存并退出后,执行以下命令使修改生效:
source /etc/locale.conf
LANG环境变量
LANG环境变量存放的是Linux系统的语言、地区、字符集,通过修改/etc/profile文件中的配置,可以设置系统的默认语言环境。
修改客户端的字符集
客户端的字符集必须与Linux服务端一致,否则会出现乱码,在使用SecureCRT时,可以在会话属性中设置字符编码。
字符集转换工具
Linux提供了iconv命令进行编码转换,将当前目录的book1.c由GBK转换成UTF8,结果输出到/tmp/book1_utf8.c中:
iconv f GBK t UTF8 book1.c o /tmp/book1_utf8.c
参数说明:
f encoding
:源文件内容的编码。
t encoding
:目标文件内容的编码。
o file
:指定输出文件。
c
:忽略输出的非法字符。
l
:列出已知的编码字符集。
s
:禁止警告信息,但不是错误信息。
verbose
:显示进度信息。
四、应用经验
1、Linux系统在业务化之前应确定字符集,之后不再改变,避免后续修改带来的麻烦。
2、如果项目没有全球化需求,建议采用zh_CN.gbk字符集。
3、虽然gb18030字符集比gbk丰富,但因其部分汉字使用4字节表示,程序员更倾向于使用gbk。
4、设置Linux的字符集时,还需考虑WEB系统和数据库系统采用的字符集,保持一致性。
五、常见问题解答(FAQ)
Q1: 如何在CentOS 7中查看当前使用的字符集?
A1: 使用以下命令查看当前使用的字符集:
locale
或查看具体语言环境变量:
echo $LANG
Q2: 如何在CentOS 7中更改字符集?
A2: 通过修改/etc/locale.conf文件来更改字符集,编辑文件并修改相应的值,如:
vi /etc/locale.conf
修改为:
LANG="zh_CN.UTF8"
然后执行以下命令使修改生效:
source /etc/locale.conf
Q3: 如何在CentOS 7中安装中文字符集?
A3: 使用以下命令安装中文字符集:
yum groupinstall "fonts" y yum install kdel10nChinese y yum reinstall glibccommon y