- 论坛徽章:
- 1
|
回复 25# 一介村夫
晕,我不知道你所谓的 linux 和 x 是两个字符集是啥子意思 ?
你直接在 linux 系统中,打开终端看看,直接用 echo $LANG 看看,字符集是不是 zh_CN.UTF-8 , 你再直接在这个终端里面执行 date 看看,是否能出现乱码?(至少我的没有出乱码,我的 字符集都是 zh_CN.UTF-8 )。
那么问题来了,为什么在 linux 下面的终端的字符集会是 zh_CN.UTF-8 ,而且不会出现乱码,但是你通过 windows 这边的 ssh 客户端登陆上去,就会出现乱码?
我们再来测试一下,还是以我使用的 putty 为例,直接登陆上去以后,你输入 echo $LANG ,我们看到字符集是 zh_CN.UTF-8 ,这个时候输入 date ,显示出现乱码了。
原因 ?
其实原因我在前面已经说了,这是因为我们的 windows 的默认字符集是 gb18030 或者是 gbk 或者是 cp936 的,又或者是 gb2312 的,这个时候,我们的客户端按照 gbk 的编码方式进行转换输出,但 linux 系统返回的字符集却是 utf-8 的 ,这个时候,它当然无法解析字符集,这也就会出现乱码 。
这根本就不是 linux 的问题,也不是 windows 的问题,而是 linux 和 windows 各自采用了不同的默认字符集的问题。当然,如果你能将 windows 默认字符集改成 zh_CN.UTF-8 的,那么你也就不需要设置了。
从你的描述来看,你如果是想做一个类似 ssh 的客户端登录程序,其实你只需要做一个 gb18030 的,在你的 linux 系统中设置默认的字符集为 gb18030 就 OK 了。输出的字符集肯定不是乱码。
如果你不希望对一个一个的用户更改,你可以修改 /etc/bashrc 文件(针对 bash 而言),直接在其中加入 export LANG=zh_CN.GB18030 , 以后你的所有的用户的默认字符集都是 gb18030 的了 。 也不需要你登录后再手动设置了。
当然,最好的建议是在你的程序中弄一个设置字符集的地方,可以进行字符集的设置,并且这个设置的字符集可以保存,就像 putty 一样,可以针对不同的 linux 主机连接,设置不同的字符集并保存,下次再连接的时候,也就不需要再设置了。
|
|