免费注册 查看新帖 |

Chinaunix

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

FTP 中文目录进不去 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-17 17:42 |只看该作者 |倒序浏览
各位是否遇到过用perl 写的ftp下载工具(linux下) 如果遇到中文目录就进不去呢。(英文一点问题没有)
目录是存在的,用浏览器也能进去 ,但程序里 就说 Permission denied. (执行 :$ftpSession->cwd("$remote") 的时候)
用其他语言写的都没问题(windows)。
应该是编码的问题,哪位老大指导一下怎么解决这问题?
谢谢

[ 本帖最后由 mrtfish 于 2009-3-17 17:45 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-03-17 18:53 |只看该作者
我有写过FTP程序,忘了有没有测试中文目录了。。。

论坛徽章:
0
3 [报告]
发表于 2009-03-17 21:47 |只看该作者
原帖由 小公猫 于 2009-3-17 18:53 发表
我有写过FTP程序,忘了有没有测试中文目录了。。。


能帮忙测测么?  实在是搞不定了  

多谢了

论坛徽章:
0
4 [报告]
发表于 2009-03-18 00:02 |只看该作者
发上来嘛~

论坛徽章:
0
5 [报告]
发表于 2009-03-18 10:41 |只看该作者
原帖由 小公猫 于 2009-3-18 00:02 发表
发上来嘛~


就是一段很简单的代码,登陆后要进入中文的目录时出错了。

if ($remote && $remote ne "") {
        $ftpSession->cwd("$remote") or $err = 1;
        if ($err) {
            print LOG "ERROR: Cannot change to directory $remote: " . $ftpSession->message . "\n";
            return;
        }
        print LOG "changed to directory $remote\n";
    }

谢谢

论坛徽章:
0
6 [报告]
发表于 2009-03-18 11:06 |只看该作者
$remote 里的中文目录你是 怎么获取的 ??
   直接在程序里写死的还是程序自己获取??
      我上周写过的一个小脚本是用程序自己获取的中文路径和中文文件名,没有什么问题可以FTP的啊

论坛徽章:
0
7 [报告]
发表于 2009-03-18 11:22 |只看该作者
原帖由 fy1234567890123 于 2009-3-18 11:06 发表
$remote 里的中文目录你是 怎么获取的 ??
   直接在程序里写死的还是程序自己获取??
      我上周写过的一个小脚本是用程序自己获取的中文路径和中文文件名,没有什么问题可以FTP的啊


是外部的参数

我这里是到指定目录去下载

刚刚又试了一遍
我直接在上层目录ls 所有文件包括目录到一个list里, 直接把固定位置的值给 $remote ,就可以了。  这样写死了程序没有通用性。  :(

有什么办法知道我应该转成什么编码么?  ftp 方是是gb2312的   
我把参数转成gb2312 后  $remote = decode("gb2312",$remote);   执行时就会报  Wide character in syswrite at /usr/lib/perl5/5.8.0/Net/Cmd.pm line 217

[ 本帖最后由 mrtfish 于 2009-3-18 11:24 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-03-18 12:34 |只看该作者

回复 #7 mrtfish 的帖子

没遇见过这样的问题,是外部参数的话  你测一下 ,在程序里把传值后的$remote输出的控制台看看到底读的是什么值吧  ,至于要转什么编码我就不知道了 ,得问问各位牛人们了 ··

论坛徽章:
0
9 [报告]
发表于 2009-03-18 13:31 |只看该作者
原帖由 fy1234567890123 于 2009-3-18 12:34 发表
没遇见过这样的问题,是外部参数的话  你测一下 ,在程序里把传值后的$remote输出的控制台看看到底读的是什么值吧  ,至于要转什么编码我就不知道了 ,得问问各位牛人们了 ··


这个是根据控制台的编码出来,早试过了,不行啊。

论坛徽章:
0
10 [报告]
发表于 2009-03-18 13:46 |只看该作者
用  Encode::Guess->guess 也识别不出来那个中文的encoding

my $str_Encoding = Encode::Guess->guess($path)->name;   (path 是直接 ls 出来的值  ,用这个值直接 cwd 是可以进中文目录的)
print "$str_Encoding\n";

Can't locate object method "name" via package "No appropriate encodings found!"

[ 本帖最后由 mrtfish 于 2009-3-18 14:13 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP