C#中下载ftp文件的问题,求解。

leavesosoon 2017-03-30 01:00:34
下载方法:
public void FTPDownload2(string URL, string filename)
{
System.Net.WebClient wc = new System.Net.WebClient();
wc.Credentials = new System.Net.NetworkCredential(ftpUserID, ftpPassword);
wc.DownloadFile(URL, filename);
wc.Dispose();
}
调用方法:
string ftpURI_all = "ftp://10.25.23.160:21/updatePackage/测试.mht";
FTPDownload2(ftpURI_all, @"D:\测试.mht");
问题:
如果ftpURI_all全是英文路径,没什么问题,可以下载,但是如果路径中出现中文的话,就会报错:
远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。

我在浏览器中访问ftp下的这个文件,发现浏览器地址栏中的地址不显示中文,而是下面这个路径:
ftp://10.25.23.160:21/updatePackage/%CA%FD.mht
于是我在程序中将带有中文路径的ftpURI_all进行转码,转成和浏览器地址栏的地址一样,也就是ftp://10.25.23.160:21/updatePackage/%CA%FD.mht,但是还是不行。
有没有大神做过类似的东西,我这里是英文路径可以下载,中文路径就不行了。
...全文
194 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
大鱼> 2017-03-30
  • 打赏
  • 举报
回复
引用 10 楼 leavesosoon 的回复:
[quote=引用 9 楼 qq_17486399 的回复:] [quote=引用 7 楼 wanghui0380 的回复:] 额,我们表示ftp其实也是url一种,自然他是ublencode,而不是什么utf8encoude
对啊,这个本来就是URL,你们那种编码只是说内容的编码,改或不改对路径没什么影响的啊[/quote] 可以仔细说说吗?[/quote] wc.DownloadFile(URL, System.Web.HttpUtility.UrlEncode(filename));试试
大鱼> 2017-03-30
  • 打赏
  • 举报
回复
引用 6 楼 leavesosoon 的回复:
[quote=引用 5 楼 qq_17486399 的回复:] [quote=引用 2 楼 leavesosoon 的回复:] [quote=引用 1 楼 xuggzu 的回复:] 设置wc.encoding,一般是gb2312
我用了这个wc.Encoding = System.Text.Encoding.GetEncoding("gb2312");,还是不行,那个错误还是存在。[/quote] 你们改的这个编码貌似是文件的编码,并不是你路径的编码,所以会无效,[/quote] 那应该怎么弄?求指教[/quote] System.Web.HttpUtility.UrlPathEncode()或者System.Web.HttpUtility.UrlEncode();用这两个试试该一下URL 的编码
leavesosoon 2017-03-30
  • 打赏
  • 举报
回复
引用 9 楼 qq_17486399 的回复:
[quote=引用 7 楼 wanghui0380 的回复:] 额,我们表示ftp其实也是url一种,自然他是ublencode,而不是什么utf8encoude
对啊,这个本来就是URL,你们那种编码只是说内容的编码,改或不改对路径没什么影响的啊[/quote] 可以仔细说说吗?
大鱼> 2017-03-30
  • 打赏
  • 举报
回复
引用 7 楼 wanghui0380 的回复:
额,我们表示ftp其实也是url一种,自然他是ublencode,而不是什么utf8encoude
对啊,这个本来就是URL,你们那种编码只是说内容的编码,改或不改对路径没什么影响的啊
leavesosoon 2017-03-30
  • 打赏
  • 举报
回复
引用 7 楼 wanghui0380 的回复:
额,我们表示ftp其实也是url一种,自然他是ublencode,而不是什么utf8encoude
什么意思?
wanghui0380 2017-03-30
  • 打赏
  • 举报
回复
额,我们表示ftp其实也是url一种,自然他是ublencode,而不是什么utf8encoude
leavesosoon 2017-03-30
  • 打赏
  • 举报
回复
引用 5 楼 qq_17486399 的回复:
[quote=引用 2 楼 leavesosoon 的回复:] [quote=引用 1 楼 xuggzu 的回复:] 设置wc.encoding,一般是gb2312
我用了这个wc.Encoding = System.Text.Encoding.GetEncoding("gb2312");,还是不行,那个错误还是存在。[/quote] 你们改的这个编码貌似是文件的编码,并不是你路径的编码,所以会无效,[/quote] 那应该怎么弄?求指教
大鱼> 2017-03-30
  • 打赏
  • 举报
回复
引用 2 楼 leavesosoon 的回复:
[quote=引用 1 楼 xuggzu 的回复:] 设置wc.encoding,一般是gb2312
我用了这个wc.Encoding = System.Text.Encoding.GetEncoding("gb2312");,还是不行,那个错误还是存在。[/quote] 你们改的这个编码貌似是文件的编码,并不是你路径的编码,所以会无效,
leavesosoon 2017-03-30
  • 打赏
  • 举报
回复
引用 3 楼 xuggzu 的回复:
换个其它编码方式试试
UTF-8GBK,GB2312我都试了,依然不行。这个问题困扰我两天了。。。
xuggzu 2017-03-30
  • 打赏
  • 举报
回复
换个其它编码方式试试
leavesosoon 2017-03-30
  • 打赏
  • 举报
回复
引用 1 楼 xuggzu 的回复:
设置wc.encoding,一般是gb2312
我用了这个wc.Encoding = System.Text.Encoding.GetEncoding("gb2312");,还是不行,那个错误还是存在。
xuggzu 2017-03-30
  • 打赏
  • 举报
回复
设置wc.encoding,一般是gb2312

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧