首页新闻招聘找找看知识库
  • 回复:13 浏览:11945 2010-01-26 10:37 来自 jack.chen

         公司有个项目要用到ftp传输文件,英文文件名的文件上传一点问题没有,就是中文文件名的文件老报 501 错误,我查阅了好多资料都说只要改一下ftp服务器的编码设置就行了,我用的是serv-u,按照网上说的把 OTS UTF8 关闭了,也不行,找了好久才发现不是ftp服务器的设置问题是我的ftp封装类出问题了,就是向服务器发送命令的sendcommand方法中的编码有问题应该改成GB2312编码就可以了,呵呵,终于解决了。。。

  • aGan@net
    2010-01-26 10:50 aGan@net
    据我所知Server-U默认是GB2312,但是FileZilla默认是UTF-8
    第1楼 回到顶楼
  • jack.chen
    2010-01-26 11:15 jack.chen
    @aGan@net
    不是吧,serv-u默认的是utf8,他的OTPS UTF8 的高级选项中 “对所有已收发的路径和文件名使用 UTF-8 编码"默认是勾选的。。
    第2楼 回到顶楼
  • 小驴
    2010-08-30 16:55 小驴
    Byte[] cmd = Encoding.Default.GetBytes((command + "\r\n").ToCharArray());
    用Default可以上传中文名称的文件和保存为中文名称的文件!
    第3楼 回到顶楼
  • 皇家二少
    2011-01-05 09:44 皇家二少
    可以说一下具体怎么操作的吗?我也遇到了相同问题
    第4楼 回到顶楼
  • daone
    2011-04-08 17:02 daone
    private FtpWebRequest reqFTP;
    WebResponse response = reqFTP.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名
    在加入个判断就OK了
    /// <summary>
    /// 判断文件名中字符是否合法
    /// </summary>
    /// <param name="FileName">文件名称</param>
    public bool IsValidFileChars(string FileName)
    {
    char[] invalidFileChars = Path.GetInvalidFileNameChars();
    char[] NameChar = FileName.ToCharArray();
    foreach (char C in NameChar)
    {
    if (Array.BinarySearch(invalidFileChars, C) >= 0)
    {
    return false;
    }
    }
    return true;
    }
    第5楼 回到顶楼
  • JInz
    2011-11-17 09:15 JInz
    你好,看了你的博客,正好有个问题,和你博客中的类似,上传中文文件名到ftp服务器乱码,C#写的。希望能得到你 的帮助。我的邮箱waicy_2003@163.com。收到信请与我联系,告诉我你的联系方式。。O(∩_∩)O谢谢。
    第6楼 回到顶楼
  • bbfins
    2012-03-19 11:50 bbfins
    能不能说一下具体操作啊 我的也是server-u ftp 中文名称无法上传 我邮箱jxghbhd@163.com 谢谢
    第7楼 回到顶楼
  • 谁是下一块砧板上的肉
    我也刚出现了类似的问题,跪求大神赐教!li_amaomao@163.com 感激不尽!
    第8楼 回到顶楼
  • 荷叶
    2016-04-11 16:07 荷叶
    我现在是在下载文件时,出现乱码问题,请问题怎么解决?
    第9楼 回到顶楼
  • 荷叶
    2016-04-11 16:13 荷叶
    点击查看大图
    第10楼 回到顶楼
  • 荷叶
    2016-04-11 16:16 荷叶
    public string[] GetFileList2(string mask,int trytimes)
    {
    if (!this.loggedin) this.Login();

    Socket cSocket = createDataSocket();

    this.sendCommand("NLST " + mask);

    if (!(this.resultCode == 150 || this.resultCode == 125)) throw new FtpException(this.result.Substring(4));

    this.message = "";

    //DateTime timeout = DateTime.Now.AddSeconds(this.timeoutSeconds);
    System.Random myrandom = new Random();
    int TimeInterval = myrandom.Next(5, 100);
    Console.WriteLine(string.Format("获取list延迟随机数:{0}",TimeInterval));
    DateTime timeout = DateTime.Now.AddSeconds(TimeInterval);
    while (timeout > DateTime.Now)
    {

    int bytes = cSocket.Receive(buffer, buffer.Length, 0);
    this.message += ASCII.GetString(buffer, 0, bytes);

    if (bytes < this.buffer.Length) continue;//break;2016-2-19改进此行
    }

    string[] msg = this.message.Replace("\r", "").Split('\n');

    cSocket.Close();



    if(msg.Length>0)
    {
    string[] mymsg = new string[msg.Length - 1];
    for(int n=0;n<msg.Length-1;n++)
    {
    mymsg[n]=msg[n];
    }

    return mymsg;
    }
    return msg;
    }
    第11楼 回到顶楼
  • 荷叶
    2016-04-11 16:17 荷叶
    这个文件列表有时候会获得乱码
    第12楼 回到顶楼
  • wecol
    2016-04-11 20:43 wecol
    有可以ftp 的服务器出问题了吧
    第13楼 回到顶楼
登录后才能评论,请先登录注册