Chinaunix

标题: 替snow888申请个版主 [打印本页]

作者: 方兆国    时间: 2012-06-09 23:52
标题: 替snow888申请个版主
格式:
  (一)申请
          版名:linux 新手园区    职务:[版主]
  (二)申请人昵称:snow888(snow888):
  (三)自我简介:
  (四)申请动机:在为大家服务的同时,与大家一起学习进步,通过与 linux 的爱好者共同探讨技术问题,尽自己的力量推动 linux 系统在朋友们中普及。
  (五)治版方针及管理方式:
          A.版面定位:
                          针对 linux 的新近入门者,或者是有志于将来从事 linux 相关工作的同道中人。
                          针对有一定基础的 linux 使用人员。
            B.讨论范围
                          linux 系统的安装、使用,一般性问题的解决。
            C.发文/删文原则
                          对不符合本版内容的帖子、广告、涉黄等垃圾信息予以删除,对探索性的与 linux 相关的技术性问题予以鼓励。
            D.标注(审核、精华、原创、置顶)原则
                          有代表性的、有创新性的内容根据技术含量,予以原创,对从技术角度分析系统特点、系统故障点并提出合理解决方案的,含有较高技术含量的原创、回帖等,予以精华奖励,对于具有典型意义,且一般容易被忽视的技术性问题,解决方案具有创新性思维,有较高的技术含量的原创、回帖、转载等,给予一定时间的置顶。
            E.锁定原则
            F.精华区收录原则
            G.封禁原则
                          对于经常性发表与本版面无关,并且危害到论坛版面的生存的,且经过多次提醒无效的予以封禁。
            H.承诺最少工作的时间:这个咋填啊,有时间的话,肯定是会经常为大家服务的撒。
作者: snow888    时间: 2012-06-10 00:03
谢谢兄弟哈。
作者: vermouth    时间: 2012-06-10 00:23
LZ咋不自己申请下?热心就好
作者: snow888    时间: 2012-06-10 00:27
回复 3# vermouth


    申请了,这个是楼主兄弟帮忙转过来的。

谢谢捧场。
作者: vermouth    时间: 2012-06-10 00:32
回复 4# snow888

我说名字是三个汉字的那热心哥们,雪儿应该板上钉钉了。
作者: snow888    时间: 2012-06-10 00:33
回复 5# vermouth


    有内幕消息?
作者: vermouth    时间: 2012-06-10 00:34
回复 6# snow888

没。
作者: 一介村夫    时间: 2012-06-10 01:07
申请BZ好啊,先解答我个Linux相关的问题吧。
为什么Linux缺省的zh_CN选用GB18030编码,而X下却使用UTF-8编码?
这种混乱导致在Linux的X窗口中使用zh_CN时,命令的输出总是显示乱码。
例如date命令。

作者: 方兆国    时间: 2012-06-10 13:17
回复 3# vermouth


    我水平比较低,还不够当版主呢
作者: 方兆国    时间: 2012-06-10 13:22
为什么Linux缺省的zh_CN选用GB18030编码


Linux文本模式缺省没有汉字集啊,在文本模式下所有的汉子都是一个小方格。
至于你说的GB18030,可能和你自己安装的汉字字符程序有关系吧。
X下却是是UTF-8,也许是因为UTF-8兼容性好吧,能显示很多种语言的字符

回复 8# 一介村夫


   
作者: 方兆国    时间: 2012-06-10 13:22
snow888 发表于 2012-06-10 00:33
回复 5# vermouth


你是不是被潜规则了
作者: 一介村夫    时间: 2012-06-10 13:46
方兆国 发表于 2012-06-10 13:22
Linux文本模式缺省没有汉字集啊,在文本模式下所有的汉子都是一个小方格。
至于你说的GB18030,可能和 ...

你用支持汉字的终端仿真程序连接Linux就知道了。
作者: 方兆国    时间: 2012-06-10 15:51
回复 12# 一介村夫
  1. root@192.168.56.101's password:
  2. Last login: Sun Jun 10 15:46:06 2012 from 192.168.56.1
  3. [root@fangzhaoguo ~]# mkdir 一介村夫
  4. [root@fangzhaoguo ~]# ls
  5. ?????                      install.log
  6. anaconda-ks.cfg            install.log.syslog
  7. back                       nginx-1.0.15-1.el6.x86_64.rpm
  8. Bootable_NoEmulation.img   repo.log
  9. cd.sh                      rpmbuild
  10. GeoIP-1.4.8-1.el6.src.rpm  一??????
  11. [root@fangzhaoguo ~]# touch 一二三
  12. 薣root@fangzhaoguo ~]# 膌s
  13. -bash: 膌s: command not found
  14. [root@fangzhaoguo ~]# ls
  15. ?????                     GeoIP-1.4.8-1.el6.src.rpm      rpmbuild
  16. anaconda-ks.cfg           install.log                    一?????
  17. back                      install.log.syslog             一??????
  18. Bootable_NoEmulation.img  nginx-1.0.15-1.el6.x86_64.rpm
  19. cd.sh                     repo.log
  20. [root@fangzhaoguo ~]# echo $LANG
  21. zh_CN.UTF-8
  22. [root@fangzhaoguo ~]#
复制代码


作者: 刘五十三    时间: 2012-06-10 17:09
LANG=en_US.ISO8859-1
应该就可以
作者: 一介村夫    时间: 2012-06-10 17:25
方兆国 发表于 2012-06-10 15:51
回复 12# 一介村夫

你再执行一下"date"。
作者: 方兆国    时间: 2012-06-10 17:36
回复 15# 一介村夫


    额,把这个给忘了
作者: snow888    时间: 2012-06-10 22:11
回复 12# 一介村夫


   


作者: 一介村夫    时间: 2012-06-10 22:34
回复 17# snow888
没看懂我的问题啊。
别设LANG。
作者: 一介村夫    时间: 2012-06-10 22:39
也许是我表达能力太差了,我再重新说明一遍吧。
为什么Linux缺省的zh_CN是GB18030编码的,而X缺省的却是UTF-8编码的?
这种不一致性带来很多麻烦。
解答问题时请重点回答“为什么”。
作者: snow888    时间: 2012-06-10 23:22
回复 19# 一介村夫


    你没有仔细看我贴的图。第三个图片。

其实 linux 默认的是 zh_CN.UTF-8 的字符集,第三个图片是我刚通过 putty 登录进去的时候,默认的字符集。

然后,我设置成了 zh_CN.GB18030 了,就正常显示了中文。

那么 OK , 我们来看一下,为什么会出现乱字符显示的现象。

其实这是前后台设置的字符集不相同造成的。我们使用的 putty 等 ssh 工具,默认的使用的是你的windows 系统的字符集,也就是 zh_CN.GB18030 的字符集,或者是 CP936 的字符集。而我们的 linux 服务器上默认的是 zh_CN.UTF-8 的字符集,这就造成了前后台字符集不一样的问题。

解决的办法有两个,思路都一样,就是让你的前、后台的字符集一样。

1、在你的 ssh 客户端的工具上设置字符集,看下图:


设置完成后的操作效果:


第二种方法是在你的 linux 系统中设置,可以设置在你需要登录的用户的配置文件中,根据不同的 shell , 设置文件会有不同,比如使用 bash , 则修改当前用户主目录的 .bashrc 文件,在其中加入 export LANG=zh_CN.GB18030
实际操作的效果就是我给你的第一次的图片的效果了。


作者: 一介村夫    时间: 2012-06-10 23:57
回复 20# snow888
你还是没理解我的意思。
分别设
LANG=zh_CN
LANG=zh_CN.GB2312
LANG=zh_CN.GBK
LANG=zh_CN.GB18030
LANG=zh_CN.UTF-8
在这些不同的设置下,看看同一个date命令有什么差别。
LANG=zh_CN与哪一个是相同的?
作者: tom_xx_hu@yahoo    时间: 2012-06-11 00:05
反对村长在这里水贴。
站务排斥一切技术讨论,一切技术讨论都是灌水。(在我眼里,无论哪里的技术讨论,都是灌水)
呼吁版主把村长给毙了。
snow888的技术也不错,支持担任版主。
作者: snow888    时间: 2012-06-11 00:07
回复 21# 一介村夫


    如果你不更改你的 ssh 客户端的字符设置,那么客户端的字符集一般而言就是 zh_CN.GB18030 . 因此你的 linux 系统里面也应该设定字符集为 zh_CN.GB18030

   我觉得你还是仔细看一下我给你的回复。


如果你不想改变你的 linux 字符集,那么你的 ssh 的客户端就应该设定字符集为 zh_CN.UTF-8 , 因为一般默认而言,如果不做特殊的设置,linux 的默认字符集就是 zh_CN.UTF-8
作者: 一介村夫    时间: 2012-06-11 00:16
做完了上面的测试,就知道
LANG=zh_CN
LANG=zh_CN.GB2312
LANG=zh_CN.GBK
LANG=zh_CN.GB18030
这些都是等价的,也就是说,缺省的zh_CN编码是GB18030!
而X缺省的zh_CN编码却是UTF-8!
这种不一致性所带来的一个问题是:在对程序进行国际化(i18n)时,为了在传统终端和X环境下都能正确地显示中文,就要做GB18030和UTF-8两个版本!
问题的关键就是,为什么Linux和X选择了不同的标准?
作者: 一介村夫    时间: 2012-06-11 00:18
本帖最后由 一介村夫 于 2012-06-11 00:18 编辑
snow888 发表于 2012-06-11 00:07
回复 21# 一介村夫

从你的回帖就看出来,你不仅没有理解我的问题所在,而且根本就没有做我提出的测试,所以说你也就根本没理解我的问题是什么。
作者: snow888    时间: 2012-06-11 00:37
回复 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 主机连接,设置不同的字符集并保存,下次再连接的时候,也就不需要再设置了。





作者: 一介村夫    时间: 2012-06-11 00:39
snow888 发表于 2012-06-11 00:37
回复 25# 一介村夫

你认为一个从1996年开始玩Linux的,会不知道或不懂得你说的这些吗?
作者: 一介村夫    时间: 2012-06-11 00:42
本帖最后由 一介村夫 于 2012-06-11 00:43 编辑

再啰嗦一遍吧:
为什么Linux和X对于zh_CN选择了不同的缺省编码?

作者: snow888    时间: 2012-06-11 00:56
回复 27# 一介村夫


    原来你从 96 年才开始玩 linux 啊,难怪。

我实在是不知道你所说的 linux 和 x 用了不同的字符集是什么意思?

你这个所谓的 x 指的是什么?

我只知道 linux 对于 字符集的支持,比 windows要丰富,如果你在系统安装的时候,安装了中文字符集 , 那么在linux 中,这个默认的字符集都是 zh_CN.UTF-8 , 在同一个环境下, 这个 linux 系统的字符集都是统一的。

当然,我们通过 linux 图形界面的 xterm 登录到 windows 终端下,我们突然发现,这 windows 系统中好好的中文文件名,咋都出现了乱码?

哦,原来是 windows 中的字符集不统一,这windows 怎么这样啊?连个字符集都不能统一一下啊?

晕,其实不是 windows 的字符集不统一,是我们的 linux 的字符集与 windows 的字符集不统一罢了。


作者: 方兆国    时间: 2012-06-11 00:57
回复 24# 一介村夫


    [code]bash.exe"-3.1$ echo $local

bash.exe"-3.1$ echo $lang

bash.exe"-3.1$ ssh root@192.168.56.101
root@192.168.56.101's password:
Last login: Sun Jun 10 15:47:01 2012 from 192.168.56.1
[root@fangzhaoguo ~]# echo $local

[root@fangzhaoguo ~]# echo $lang

[root@fangzhaoguo ~]# echo $LOCAL

[root@fangzhaoguo ~]# echo $LANG
zh_CN.UTF-8
[root@fangzhaoguo ~]# date
2012骞?06鏈?11鏃?鏄熸湡涓
作者: vermouth    时间: 2012-06-11 01:07
怎么搞得跟面试似的?
作者: 方兆国    时间: 2012-06-11 01:08
回复 29# snow888


    我的那个测试时在Windows下用MinGW附带的一个ssh工具链接虚拟机的情况(那一套工具包括不少的shell基本工具),虚拟机是CentOS6.2,没有装图形界面
作者: 一介村夫    时间: 2012-06-11 01:10
回复 30# 方兆国
测试应该这样做:
LANG=zh_CN date
LANG=zh_CN.GB2312 date
LANG=zh_CN.GBK date
LANG=zh_CN.GB18030 date
LANG=zh_CN.UTF-8 date

作者: 方兆国    时间: 2012-06-11 01:14
回复 33# 一介村夫


    额,可是我echo $local 与echo $lang没有任何反应,大小写都试过了
作者: snow888    时间: 2012-06-11 01:15
回复 32# 方兆国


    你在那个里面设置一下字符集为 zh_CN.GB18030 , 然后输入 date ,就是对的。

再来一个测试,你修改你的 centos 6.2 中的 /etc/bashrc 文件,在其中最后加入 export LANG=zh_CN.GB18030  , 然后重新启动你的 CentOS , 在用你的那个 bash.exe 连进去,执行 date , 应该也不会出现乱码。而且以后不管任何时候,你的 centos 可以重启 N 此,你随时用 bash.exe 连进去,都不会再出现乱码了。


作者: 方兆国    时间: 2012-06-11 01:30
额,谢谢,明天再试吧,今天太晚了回复 35# snow888


   
作者: 一介村夫    时间: 2012-06-11 01:41
snow888 发表于 2012-06-11 00:56
回复 27# 一介村夫
我实在是不知道你所说的 linux 和 x 用了不同的字符集是什么意思?

你把33楼的代码帖你终端里,可能就知道是什么意思了。
再不知道,就当我没问好了。
作者: snow888    时间: 2012-06-11 01:48
回复 37# 一介村夫


    你那个 33 楼的测试,我的都完全正常。都不是乱码。在我贴的图片里面,有完整的信息。

当然,你的是不是乱码,我不知道。
作者: 一介村夫    时间: 2012-06-11 01:51
本帖最后由 一介村夫 于 2012-06-11 01:54 编辑
snow888 发表于 2012-06-11 01:48
回复 37# 一介村夫
你那个 33 楼的测试,我的都完全正常。都不是乱码。

神仙,能给我们贴个截图开开眼么?
作者: snow888    时间: 2012-06-11 02:07
本帖最后由 snow888 于 2012-06-11 02:09 编辑

回复 39# 一介村夫


    你看看。






无标题1.png (30.97 KB, 下载次数: 18)

无标题1.png

作者: 一介村夫    时间: 2012-06-11 08:57
本帖最后由 一介村夫 于 2012-06-11 08:57 编辑
snow888 发表于 2012-06-11 02:07
回复 39# 一介村夫

我对你的理解力敬佩得五体投地!
谢谢你的解答,就当我没问好了。
作者: tom_xx_hu@yahoo    时间: 2012-06-11 11:17
snow888不必介意,村长向来都有表达不畅的问题(他自己承认的,不信请sendlinux把摄版放开就可以看到原帖哦)。

作者: snow888    时间: 2012-06-11 11:54
回复 42# tom_xx_hu@yahoo


    其实,我真的不知道他所谓的 x 指的是什么 ?

说来说去,我觉得这还是 linux 的错,如果 linux 从操作系统层面上来讲,就像 windows 那样,只支持一个 gbk 字符集(其它的gb*字符集其实和gb2312 是一样的,不过是这一种字符集类型扩展而已。)。那么也就不会再有什么问题了。


其实我更觉得,对这个问题的理解,应该去看看 iconv 的内容,那里面说得很清楚了。送过来的字符集是什么,那么接收方就应该按照那种字符集进行解析,至于在 windows 端的显示,其实都是按照 gbk 的方式显示的。


作者: 方兆国    时间: 2012-06-11 13:19
回复 43# snow888


    我感觉她说的X指的就是GNOME下的那个虚拟终端吧,反正呢我是这么理解的
作者: snow888    时间: 2012-06-11 14:25
回复 44# 方兆国


    肯定不是指那个 xterm , 因为那个咚咚的默认字符集就是操作系统设定的字符集,而且那个咚咚是可以设置需要转换的字符集的,并且可以保存为默认值。

所有的 shell 或者是 ssh ,其本质都是一个 c/s 架构的程序,由客户端和后台的服务端组成。客户端要正常显示,需要知道服务端传过来的字符集是什么,并根据这个字符集类型进行转换,转换成客户端的字符集类型并加以显示,这才能正确的显示中文信息。

在 windows 上为什么不需要设置?

这是因为在 windows 对于中文的自持在系统级就只支持 gbk 的字符集,utf-8 的字符集是通过转换成 gbk 的字符集来显示的,我们在 windows 上就没有发现过设置字符集的地方(至少是我没有发现,也许我安装的是中文的 windows,不是安装的 e 文的 windows + 多国语言包)。

windows 系统上的应用程序(如 IE )等为什么能显示 utf-8 字符集的信息?

这是因为你的网页上设定了默认的字符集,或者是你在你的 IE 里面设定了字符集,这个和 putty 中设定需要转换的字符集,其实是一样的。同时通知应用程序,传过来的字符集是 utf-8 的,让它根据这个信息转换成客户端的 gbk 的字符集并加以显示。

linux 支持很多的字符集,但这个优势却有一个致命的缺陷,那就是它默认的字符集是 utf-8 的,与 windows 客户端不兼容,这带来的问题是,如果不进行设置,那么在客户端登录上 linux 并使用中文信息时时,将出现乱码。

其实,反过来做一个实验你就能理解,我记得 windows 2003 是支持字符界面的终端登录的,可以 telnet 上 win2003 的,可以在 linux 上在 xterm 中用 telnet 登录一下,如果不进行设置,你看到的中文一样是乱码。在windows 上我们无法设置字符集是 utf-8 , 但是我们可以通过改变xterm 客户端的字符类型,来达到正常显示的目的。
作者: snow888    时间: 2012-06-11 14:27
再说一个更容易理解的。

你在 linux 下用 iconv 工具,将一个 utf-8 的文档转成 gbk 的,然后又转换回来,你就知道是什么意思了。
作者: 方兆国    时间: 2012-06-11 15:00
snow888 发表于 2012-06-11 14:27
再说一个更容易理解的。

你在 linux 下用 iconv 工具,将一个 utf-8 的文档转成 gbk 的,然后又转换回来 ...


这个支持

@一介村夫
作者: snow888    时间: 2012-06-11 15:18
回复 47# 方兆国


    这个和 linux 下的 xterm 有何不同?
作者: gilet    时间: 2012-06-11 15:20
好高深,不懂啊
作者: snow888    时间: 2012-06-11 15:22
回复 47# 方兆国


    如果你将这个字符集修改成 utf-8 的,然后你再从这个里面 telnet 登录 linux , 假设你的 linux 的默认字符集没有修改,那么你看到的应该就不是乱码。
作者: snow888    时间: 2012-06-11 15:23
回复 49# gilet


    装,接着装。
作者: 方兆国    时间: 2012-06-11 15:26
回复 48# snow888


    编码不同呀,这个支持的明显只有GBK和那个什么
作者: 方兆国    时间: 2012-06-11 15:27
回复 50# snow888


    只可惜这个的编码修改不了

这个是CMD的截屏啊
作者: snow888    时间: 2012-06-11 15:30
回复 52# 方兆国


    上面那个你实验了没有?

应该是不用在客户端再设置,就能正常显示中文了。

我说的操作系统层面是指操作系统的核心对于字符集的支持。就像 linux , 你可以在没有 xwindows 的情况下,设置字符集,并且支持任何客户端连上来后的字符集解析。

貌似这一点 windows 就没有支持(据说 windows 2008 可以不安装图形界面,但字符集是否支持 utf-8 我不知道)。


作者: 方兆国    时间: 2012-06-11 15:32
回复 54# snow888


    木有啊,我在Windows下是用cmd连接虚拟机的,cmd的编码只有gdk,不能修改
作者: snow888    时间: 2012-06-11 15:41
回复 55# 方兆国


    我是让你改linux服务器上的默认的字符编码啊,你改成 gb18030 或者是 gbk , 然后保存,下次你再也不需要修改了呀。

最好的办法是在  /etc/sysconfig/i18n 中进行修改。
作者: tom_xx_hu@yahoo    时间: 2012-06-12 10:40
唉呀,统一UTF-16就好了,全都包括进去算了——不过,我不懂字符集,这个东西太绕,人为规定的不可理喻的成分太多。
作者: 财版    时间: 2012-06-12 12:33
@snow888  X登陆时,可以选字符集登陆,他没选和文本一样的字符集,所以才有了这个问题。
作者: snow888    时间: 2012-06-12 12:53
回复 58# 财版


    是这个原因。

其实这就是一个 c/s 架构的程序,服务器端(linux)接收到客户端(windows)的请求,返回一个文本信息,这个信息的字符编码是 utf-8 的,客户端收到这个返回的文本信息后,根据默认的字符集转换成客户端的字符集信息,并加以显示出来。基本的函数模型大概是 iconv(源字符集,源数据流,目标字符集,目标数据流),如果客户端没有指定,那么客户端默认源的字符集与客户端的字符集是一样的,也就是 gbk 的字符集。

问题是服务器端传过来的是 utf-8 的字符集,而客户端按照 gbk 的字符集读取传过来得数据流并加以解析,结果就出错了,就出现了乱码。

如果设置了客户端需要转换的字符集为 utf-8 , 这个时候,客户端会认为 linux 传过来的字符集是 utf-8 的,并且暗转 utf-8 来读取传过来得数据流并解析,因此就可以成功显示正确的中文信息了。

这个转换的模型大致如下:


server                                                          client
=========================================
utf-8                       ------------>                  gbk


作者: 方兆国    时间: 2012-06-12 18:51
回复 57# tom_xx_hu@yahoo


    UTF-16貌似很少用的,网页都是UTF-8的,很少用UTF-16




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2