C# FTP错误553-不允许使用umlauts文件名

C# FTP错误553-不允许使用umlauts文件名,c#,upload,ftp,diacritics,C#,Upload,Ftp,Diacritics,我使用C#上传文件时遇到问题: 当我试图上传一个路径和/或文件名中包含德语Umlauts(ä,ö,ü)的文件时,我收到FTP错误553“文件名不允许” 我可以上传没有umlauts的文件,没有任何问题。我已经检查了编码是否正确,并且在我的FTP上是否启用了utf-8。我真的不想更改任何包含umlauts的文件,所以我希望我能在这里做些什么 当我通过Filezilla上传文件时,一切都很好。下载或获取这些文件也没有问题。仅上载它们会导致错误 这很好: ftp://ftp.myurl.com/mai

我使用C#上传文件时遇到问题: 当我试图上传一个路径和/或文件名中包含德语Umlauts(ä,ö,ü)的文件时,我收到FTP错误553“文件名不允许”

我可以上传没有umlauts的文件,没有任何问题。我已经检查了编码是否正确,并且在我的FTP上是否启用了utf-8。我真的不想更改任何包含umlauts的文件,所以我希望我能在这里做些什么

当我通过Filezilla上传文件时,一切都很好。下载或获取这些文件也没有问题。仅上载它们会导致错误

这很好:

ftp://ftp.myurl.com/mainfolder/folder/filename [id].png
这将给我错误553:

ftp://ftp.myurl.com/mainfolder/folder/filenäme [id].png
ftp://ftp.myurl.com/mainfolder/földer/filename [id].png
以下是我的源代码:

            string fullpath = ftp.url + folder + "/" + file.name;
            fullpath = fullpath.Replace("ä", "%C3%A4").Replace("ü", "%C3%BC").Replace("ö", "%C3%B6").Replace(" ","%20");
            Uri uri = new Uri(fullpath);

            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
            request.UseBinary = true;
            request.KeepAlive = false;
            request.UsePassive = false;
            request.Timeout = 10000;
            request.Method = WebRequestMethods.Ftp.UploadFile;

            request.Credentials = new NetworkCredential(Data.user, Data.password);

            FileStream fs = new FileStream(file.fullname, FileMode.Open, FileAccess.Read);
            BinaryReader sourceStream = new BinaryReader(fs, Encoding.UTF8);

            Stream requestStream = request.GetRequestStream();

            byte[] chunk;
            chunk = sourceStream.ReadBytes(1024);
            int totalLength = 0;
            while (chunk.Length > 0)
            {
                requestStream.Write(chunk, 0, chunk.Length);
                totalLength += chunk.Length;
                chunk = sourceStream.ReadBytes(1024);
            }
            requestStream.Close();
            sourceStream.Close();
            request.ContentLength = totalLength;

            FtpWebResponse response = (FtpWebResponse)request.GetResponse();

            Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);

            response.Close();

从你的代码中可以看出你已经在替换不寻常的字符了,我认为问题在于第二行的替换缺少一个特殊的字符来编码。例如,我可以用umlauts上传一个文件,没有任何问题。我甚至不需要你的URL编码代码。向我们显示一个日志文件,包括和FileZilla。从您的代码来看,这表明您已经在替换不寻常的字符,我认为问题在于第二行的替换缺少一个需要编码的特殊字符。例如,我可以用umlauts上传一个文件,没有任何问题。我甚至不需要你的URL编码代码。向我们显示一个日志文件,包括和FileZilla。