LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6028|回复: 7

Samba utf8下 中文共享文件名问题的解决

[复制链接]
发表于 2004-5-29 12:51:18 | 显示全部楼层 |阅读模式
系统环境:Debian Sarge + Samba 3.0.2a + zh_CN.UTF8 locale

在使用samba的环境中,我的系统使用的是Unicode,在创建Samba共享的时候,如果是中文的共享名,在Windows2000和WinXP以上的系统中,由于有考虑到unicode的设计,所以无论用什么编码都可以看见中文共享名,而Win98和Winme就不可以了,
Samba提供了两个参数来调整:
dos charset 和 unix charset

我的系统原来是gbk的,而其他的系统使用的是Unicode的,这样在个系统之间拷贝文件的时候,如果有中文名,就非常恼火,每次还要转一下编码,这次趁买了新硬盘的机会,将gbk编码转化成了utf8的编码(感谢debian-chinese-gb邮件列表上的carlos,他提示我Debian中有convmv这个命令来将目录中的文件名转换编码,实际上convmv还可以作大小写的转换,很不错),原来在gbk环境下,Samba的配置是

dos charset = cp936
unix charset = cp936

这个样子就很好,可以适应各个客户端(98,me,2k,XP),转化成unicode后,问题来了,如果保持这个设置,各个系统会还是认出中文共享名,但是,它们创建的文件名就是gbk编码,费了老劲不是又走回去了吗?如果都改成UTF8,98和Me又认不到中文共享。

各位看官,在这儿我的脑筋打结了,走了如下弯路:
1,保持配置文件是UTF8编码,然后用GBK的环境编辑samba配置文件,加上GBK的共享文件名,结果:98可以看见中文名,但是无法访问,2k看不到中文共享名。
2,既然98是不支持Unicode,那我就想办法让它支持,在网上居然还真找到了Unicode补完计划,不过是针对Big5的补完,我装上了,没有效果。
3,还有招,我装个南极星,这个不错,可以看见中文共享了,可是,有的中文共享名是好的,有的却残缺不全,比如说,本来名称是“共享文件夹”,看起来却是“共享文件”,这还算好的,有的根本就是乱码。

没辙了,正好肚子不舒服,赶紧撇大条,完了结就打开了。

因为我们的samba的系统是unicode编码的,所以unix charset应当设置为UTF8,98只认gb2312,那就将dos charset设置为cp936.

dos charset = cp936
unix charset = UTF8

我原来以为dos charset 和 unix charset 要设置成一样的,没想到Samba还可以这样玩。




这件事告诉了我们一个道理:有问题想不通的时候,就应该撇大条。
发表于 2004-5-29 13:07:31 | 显示全部楼层
谢谢分享。
但是 Unicode != UTF-8 哦。
Unicode == UTF-16
http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8

----
又及,
sorry, 是我搞错了::p
UTF-8 is the byte-oriented encoding form of Unicode.
http://www.unicode.org/faq/utf_bom.html#2
发表于 2004-5-29 14:11:21 | 显示全部楼层
大大强劲!!
发表于 2004-5-29 17:02:58 | 显示全部楼层
不同操作系统之间共享文件时字符集问题是挺惹火的。
 楼主| 发表于 2004-6-2 22:19:58 | 显示全部楼层

请小心行事

太恐怖了,10分钟,就可以把我剩余的278M空间填满。

当使用
dos charset = cp936
unix charset = UTF8
时,当客户端浏览Samba共享的时候,Samba会将UTF8转换成gbk显示给客户端,显示没有问题,但是在lib/iconv.c中包含调试信息,就是转换过程中可能有什么问题,几十个人浏览Samba共享的时候,一会儿就把我的磁盘空间占满了。

我暂时把lib/iconv.c中的调试信息注释掉了重新编译安装的。
发表于 2004-6-2 22:36:29 | 显示全部楼层
最初由 chaisave 发表
谢谢分享。
但是 Unicode != UTF-8 哦。
Unicode == UTF-16
http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8

----
又及,
sorry, 是我搞错了::p
UTF-8 is the byte-oriented encoding form of Unicode.
http://www.unicode.org/faq/utf_bom.html#2


究竟是哪个错了?
我认同你第一个观点:UNICODE != UTF-8
发表于 2004-6-3 07:47:33 | 显示全部楼层
UTF-xx is just encoding form of unicode,
so neither UTF-8 nor UTF-16 equal Unicode.
发表于 2004-6-27 04:04:08 | 显示全部楼层
samba传过来的utf-8文件,在ftp里打开还是乱码,至今没有找到一个好的解决办法。
看网上有的方案,用proftpd必须要在server和client之间进行转换才行,有用php实现的、有用iconv实现的,但都没有公开资料;
pureftpd 1.0.18以上倒是说支持unicode,但资料也很少。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表