+ -
当前位置:首页 → 问答吧 → Samba utf8下 中文共享文件名问题的解决

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

时间:2004-05-29

来源:互联网

系统环境: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还可以这样玩。




这件事告诉了我们一个道理:有问题想不通的时候,就应该撇大条。

作者: achaoge   发布时间: 2004-05-29

谢谢分享。
但是 Unicode != UTF-8 哦。
Unicode == UTF-16
http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8

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

作者: chaisave   发布时间: 2004-05-29

大大强劲!!

作者: yggdrasil   发布时间: 2004-05-29

不同操作系统之间共享文件时字符集问题是挺惹火的。

作者: memory   发布时间: 2004-05-29

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

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

我暂时把lib/iconv.c中的调试信息注释掉了重新编译安装的。

作者: achaoge   发布时间: 2004-06-03

引用:
最初由 chaisave 发表
谢谢分享。
但是 Unicode != UTF-8 哦。
Unicode == UTF-16
http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8

----
又及,
sorry, 是我搞错了:
UTF-8 is the byte-oriented encoding form of Unicode.
http://www.unicode.org/faq/utf_bom.html#2
究竟是哪个错了?
我认同你第一个观点:UNICODE != UTF-8

作者: pupilzeng   发布时间: 2004-06-03

UTF-xx is just encoding form of unicode,
so neither UTF-8 nor UTF-16 equal Unicode.

作者: carlos   发布时间: 2004-06-03

samba传过来的utf-8文件,在ftp里打开还是乱码,至今没有找到一个好的解决办法。
看网上有的方案,用proftpd必须要在server和client之间进行转换才行,有用php实现的、有用iconv实现的,但都没有公开资料;
pureftpd 1.0.18以上倒是说支持unicode,但资料也很少。

作者: cyberdna   发布时间: 2004-06-27