终于让fat格式的U盘不再显示乱码了

我使用的ubuntu 8.04.1,KDE4.1.2桌面环境,一直以来存在一个问题,如果挂载fat文件格式的U盘或者可移动硬盘时,中文文件夹和文件的名字就变成了一堆的????。
在网上查阅了很多的资料,目前找到了一下这个可行的解决方案。
修改/usr/share/hal/fdi/policy/10osvendor/目录下的20-storage-methods.fdi文件

sudo vi /usr/share/hal/fdi/policy/10osvendor/20-storage-methods.fdi



hald-addon-storage

的后面添加


true


出现这个问题的根本原因是,fat文件系统并没有规定使用何种字符集编码来存贮文件夹和文件的名字。windows在具体操作的时候,根据具体的区域设置来选择所使用的字符集编码,中国大陆区域使用gb2312,代码页是cp936;台湾区域使用big5,代码页是cp950。
在挂载fat文件系统的时候,需要根据fat具体使用的字符集编码来指定iocharset参数,来正确挂载fat文件系统。
在我这里,我使用的是windows简体中文版,所以使用iocharset=cp936。
关于 代码页,维基百科里面有说明。
这里有一篇关于“ 代码页地狱”的文章,讲述了乱码的深层原因。
至于key="volume.mount.valid_options.iocharset=cp936"这一串东西是怎么来的,这是因为我在/usr/share/hal/fdi/policy/10osvendor/目录下的20-storage-methods.fdi中找到了这么几行东东


utf8
shortname=
codepage=
iocharset=
umask=
dmask=
fmask=
uid=
flush

不同的发行版似乎略有不同,比如,网上很多关于fedora的文章里面就写成了key="volume.mount.options.iocharset=cp936
为什么这样修改可行的原理尚待学习中,貌似是修改了hal的policy的原因。
对了,修改保存后别忘了重启hal
sudo /etc/init.d/hal restart

================================
2008年10月30日追加:
上面的文字只对Ubuntu8.04及以前的版本有历史意义。
就像有人提到的gnome就不需要在hal添加手工侦测codepage的配置而可以直接挂在简体中文(繁体中文、日文)的fat文件系统一样,在 ubuntu8.10的KDE4中,我们也不再需要对hal的配置做任何修改,而可以直接挂在fat的文件系统了。其实这样较好,codepage的侦测应该放在桌面环境的层面比较好,如向上面这样在hal中强制制定fat的codepage,那么遇到其他codepage的fat文件系统,就会乱骂依旧。而通过桌面环境对插入的fat文件系统的codepage进行侦测,然后在决定如何mount,这样还是比较合适的。
只是不知道KDE4是通过怎样的策略去实现的,我能想到的有两种,一种是在fat中记录codepage;一种是根据区域设置选择codepage,比如zh_CN的 Codepage就自动指定为cp936。第一种方法的问题是可能要扩展fat的标准,因为不知道原先fat是否记录codepage的(我估计是没有记录,不然不会有乱码一箩筐),另外对于没有codepage记录的fat,需要进行codepage猜测;第二个方法的弊端是如果我的区域设置是 zh_CN,如果我插入一个被日文windows所使用的fat文件系统,乱码依旧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值