目 录CONTENT

文章目录

linux服务器中文乱码

xlong
2024-04-06 / 0 评论 / 0 点赞 / 8 阅读 / 5319 字 / 正在检测是否收录...

linux服务器中文乱码

字符编码和字符集

1、字符编码(character encoding):

字符编码是一种法则,在数字与符号之间建立的对应关系。不同的国家有不同的语言,包含的文字、标点符号、图形符号各有不同。例如在ASCII编码中,用数字97表达字符'a'与字符集相对应,常见的字符编码有ASCII,GBK,GB18030,Unicode等。

2、字符集(Character set)

字符集是字符的集合,字符是文字和符号的总称,用ASCII编码的字符集称之为ASCII字符集,用GBK编码的字符集称之为GBK字符集。

3、国际编码(Unicode)

为了解决传统的字符编码方案的局限,1994年发布了Unicode(国际编码、统一码、万国码、单一码、通用码),它是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 将全世界所有的字符统一化,统一编码,再也不存在字符集不兼容和字符转换的问题。

Unicode 有以下三种编码方式:

1)UTF-8:兼容ASCII编码;拉丁文、希腊文等使用两个字节;包括汉字在内的其它常用字符使用三个字节;剩下的极少使用的字符使用四个字节。

2)UTF-16:对相对常用的60000余个字符使用两个字节进行编码,其余的使用4字节。

3)UTF-32:固定使用4个字节来表示一个字符,存在空间利用效率的问题。

汉字的编码

1、汉字的编码

支持汉字(简体中文)的编码有GB2312、GB13000、GBK、GB18030和Unicode(UTF-8、UTF-16、UTF-32)。

1)GB2312

仅包含大部分的常用简体汉字,但已经不能适应现在的需要。

2)GB13000

由于GB2312的局限性,国家标准化委员会制定了GB13000编码;但由于当时的硬件和软件都已经支持了GB2312,而GB13000与GB2312完全不兼容,所以没有能够得到大范围的推广使用。

3)GBK

有了GB13000的教训,中国国家标准化委员会制定了GBK标准,并兼容了GB2312标准,同时在GB2312标准的基础上扩展了GB13000包含的字;由于该标准有微软的支持,得到了广泛的应用。

4)GB18030

GB18030编码比GBK又新增了几千个汉字,但由于码位不足使用了2byte与4byte混合编码方式,这给软件开发增加了难度。

5)Unicode

包含全世界所有国家需要用到的字符,是国际编码,通用性强。

2、编码的转换

GBK和GB18030与Unicode编码之间需要转换,否则会出现汉字乱码。

查看当前系统默认采用的字符集

# locale
LANG=en_US.UTF-8     #系统当前字符集
LC_CTYPE="en_US.UTF-8ᾢ
LC_NUMERIC="en_US.UTF-8ᾢ
LC_TIME="en_US.UTF-8ᾢ
...
LC_ALL=

查看系统支持字符集

# locale -a 
C
en_US.utf8
POSIX

安装中文字符集

# 安装中文语言包
yum -y install kde-l10n-Chinese
yum -y reinstall glibc-common

# 定义字符集
localedef -c -f GB18030 -i zh_CN zh_CN.GB18030

# 确认载入成功
locale -a |grep CN

使用中文字符集

CentOS6.x 字符集配置文件在/etc/sysconfig/i18n文件中。

CentOS7.x 字符集配置文件在/etc/locale.conf文件中。

# 临时使用
export LANG="zh_CN.UTF-8"

export LANG="en_US.UTF-8"

echo "中文乱码"

# 永久使用
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
source /etc/locale.conf

修改ssh终端字符集

如果按照以上方法设置修改设置中文语言还是不行,注意SSH终端选择的编码,如xshell为例,把终端的编码选择对应的编码即可。

注意: xshell编码必须与系统LANG设置编码一致否则会出现乱码。

如果系统界面依然出现乱码,再安装以下包:

yum groupinstall "fonts" -y

# 如果还是乱码,进入fonts安装路径执行以下命令

cd /usr/share/fonts/
fc-cache -fv

转换编码

iconv命令可以把文件内容从一种编码转换成另一种编码。

参数说明:

--list:列出iconv支持的编码列表。

-f encoding:源文件内容的编码。

-t encoding:目标文件内容的编码。

-o file:指定输出文件。

-c:忽略输出的非法字符。

-l:列出已知的编码字符集。

-s:禁止警告信息,但不是错误信息。

--verbose:显示进度信息。

yum -y install file 

# 转换前
# file TongWTPCli.Conf.bak
TongWTPCli.Conf.bak: ISO-8859 text

# ISO-8859编码文件转换UTF-8文件
iconv -c -f GB2312 -t UTF-8 TongWTPCli.Conf.bak >TongWTPCli.Conf.bak1

# 转换后
# file TongWTPCli.Conf.bak1 
TongWTPCli.Conf.bak1: UTF-8 Unicode text

0

评论区