免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 911 | 回复: 0
打印 上一主题 下一主题

关于linux中的字符编码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-22 21:48 |只看该作者 |倒序浏览
在linux中时常会碰到乱码的问题,前两天和fxq讨论了一下这个问题,现总结如下。先通过一个实验来说明问题:我的/etc/sysconfig/i18n中的配置为LANG="zh_CN.UTF-8",即我的系统使用的UTF-8字符集,我的终端中的设定字符编码为当前区域UTF-8,我的终端输出是正常的。现在把设定字符编码改为GB18030,然后在一个有中文文件名的目录下执行ls -l,发现ls自己输出的“总计”两个字和所有中文文件名都是乱码,如果把LANG改为zh_CN.GB18030,那么"总计"这两个字可以正常显示,但是文件名仍然是乱码,也就是说程序(ls)的输出会根据当前的LOCALE选择相应的字符集,而文件名是按照原来的LOCALE指定的编码写到磁盘中的,不会再随当前的LOCALE发生。不管是程序自己输出的,还是文件名,都要满足查看使用的字符集和文字本身的字符集是一致的。
为什么在挂载U盘的时候要指定字符集,这是因为windows对于文件名是强制使用UNICODE编码的,需要linux中的vfat这个文件系统把UNICODE转化为终端可以识别的字符集。
UNICODE字符集包含了各种文字的编码,以两个字节表示一个字符,。在UNICODE中以两个0表示字符串的结束,这样在linux上处理unicode的字符串不是很方便。于是linux采用了另外一种字符集utf-8,它是把unicode的一种一一映射,原来UNICODE使用0加上一个字符表示的那些字符转化成一个字符,比如ASCII码,而原来用两个非0字节表示的字符而用3个字节来表示:
echo "中国" > test
wc -c test
7
结果是7,是因为还包括一个回车符0xa
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22326/showart_482402.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP