发现用Windows资源管理器访问我在自己的Desktop上假设的vsftpd乱码的问题已经有一段时间了,该问题具体如下:
- 如果我在自己的Gentoo Linux上的ftp共享文件夹放置了中文文件名的文件,用Windows资源管理器浏览就会发现乱码,用Firefox和IE浏览则不会。
- 如果用Windows资源管理上传一个中文文件名的文件,则在本地的共享文件夹浏览为乱码,IE查看为正常中文。
- 将本地终端的字符编码改为UTF8,则由Windows资源管理器上传的文件的文件名为正常中文。由此可知,Windows资源管理器是用UTF8编码和我的vsftpd交互的。
为什么唯独Windows资源管理器用UTF8编码和vsftpd交互呢?并且印象中以前的vsftpd并没有这个问题,google了一下后,发现原来是:Windows资源管理器会在交互过程中发送“OPTS UTF8 ON”,如果ftp服务器能正确识别这条命令,那么后续的交互将都会以UTF8编码进行,否则不对编码做任何转换,即认为服务器和Windows编码一致;我的Gentoo Linux的本地编码为GB2312,而vsftpd总是假设服务器的运行环境为UTF8,这样问题就产生了。
为此,我针对vsftpd-2.0.7做了一个补丁。这个补丁引入了一个locale配置参数,用以表示服务器的本地编码,如果在和客户端交互的过程中遇到了"OPTS UTF8 ON"命令,那么后续交互的内容都在locale和UTF8之间做编码转换;否则,什么都不做,即假定本地编码和客户端编码一致。
补丁一并向vsftpd的维护者提交了,但到目前为止还没收到任何回复,故附在下面,以供和我有同样问题者使用。
|
文件: | vsftpd-2.0.7-locale.diff.gz |
大小: | 1KB |
下载: | 下载 |
|
阅读(13367) | 评论(12) | 转发(0) |