换了工作以后,一直比较繁忙,很少写日志了,难得今天有时间写一篇小记吧。
最近主要工作是把游戏服务端C++程序从Windows server上移植到linux server上。由于是第一次做游戏方面的工作。所以压力还是有些的。关键是我从来就不玩游戏。所以关于游戏的一切都感到比较新鲜。
经过近三个月的努力,终于把代码给移植完成了,但编码是个问题。Windows server 众所周知默认是使用gbk 编码的。在我到这个公司之前,游戏客户端和服务器端的代码都已经写好了。而且运行的还比较稳定,由于购买云服务器时,Windows系统比linux系统贵不少,所有公司决定移植服务器到linux上。当我把代码移植完成后,发现客户一进入游戏就会立刻挂掉。经过客户端兄弟现场debug发现是中文用utf8编码发送给客户端所致。如果改客户端工作量真的是太大。而且版本方面也不好维护。所以决定把linux系统的编码改成gbk。经过一天的摸索和测试终于把这个问题给解决了。现在把处理过程记录如下。
系统环境:CentOS6.5 内核版本:2.6.32-431.el6.x86_64
1. 查看本系统是否已安装中文支持包:rpm -qa|grep Chinese 如果有如下列表则说明已经安装了中文支持包:
kde-i18n-Chinese-Big5-3.5.10-11.el6.noarch
kde-i18n-Chinese-3.5.10-11.el6.noarch
如果没有类似的列表,那么就用命令安装中文支持包: yum -y groupinstall chinese-support
2. 编辑 /etc/sysconfig/i18n 配置文件。
用 vim 打开 /etc/sysconfig/i18n 录入如下设置
LANG="zh_CN.gbk"
LANGUAGE="zh_CN.gbk:zh_CN"
SUPPORTED="zh_CN.gbk:zh_CN:zh"
SYSFONT="lat0-sun16"
SYSFONTACM="8859-15"
3. 为了让vim以后编辑带有中文的gbk编码文件不乱码,需要在vimrc里添加如下两行:
用 vim 打开 /etc/vimrc 录入如下设置
set fileencoding=utf-8
set fileencodings=utf-8,gb18030,gbk,big5
4. 保险起见,在用户shell文件.bash_profile 里设置如下两个环境变量:
用 vim 打开 ~./.bash_profile 录入如下设置(此不可省略)
export LC_ALL="zh_CN.gbk"
export LANG="zh_CN.gbk"
5 重新登陆系统,或reboot系统使配置生效。这样bgk的中文在linux就可以正确显示了。
但是当我用开源的ftp工具FileZilla 上传windows下的文件到linux系统后,发现文件名是乱码。而文件的内容可以正确显示。折腾了半天才发现原来是FileZilla 传输文件时使用的编码所导致的。FileZilla 链接linux时,默认使用的字符集是utf8。修改FileZilla 字符集:文件-->站点管理-->选中要登陆的站点-->字符集-->使用自定义的字符集 下输入gbk。再上传文件问题解决了。文件名和文件内容均可正常显示。