当前位置: 首页 > 编程语言 > C#

Ftp使用utf-8字符创建文件名,例如希腊语,德语等分享

时间:2023-04-10 17:59:28 C#

C#学习教程:Ftp使用utf-8字符创建文件名,例如希腊语、德语等“姓名”;字符串密码=“密码”;stringremotefolder="ftp://ftp.myhost.gr/public_html/test/";stringremoteFileName="δοκιμαστικ?αρχε?οü?-?Copy.txt";stringlocalFile=@"C:testδοκιμαστικ?αρχε?ο-Copy.txt";字符串ftpname="ftp://ftp.myhost.gr/public_html/test"+@"/"+Uri。EscapeUriString(Program.remoteFileName);FtpWebRequest请求=(FtpWebRequest)WebRequest.Create(ftpname);请求.Proxy=null;request.Credentials=newNetworkCredential(用户名,密码);请求.UsePassive=true;请求.KeepAlive=真;request.Method=WebRequestMethods.Ftp.UploadFile;请求.UseBinary=true;//request.UseBinary=false;byte[]content=System.IO.File.ReadAllBytes(localFile);byte[]fileContents=newByte[内容.长度];Array.Copy(content,0,fileContents,0,content.Length);使用(流上传adStream=request.GetRequestStream()){intcontentLength=fileContents.Length;uploadStream.Write(fileContents,0,contentLength);}FtpWebResponse响应=(FtpWebResponse)request.GetResponse();Console.WriteLine(response.ExitMessage)我的ftp服务器上的文件是否没有得到我请求的名称,其中包含英语、希腊语和德语字符-->"δοκιμαστικ?αρχε?οü?-?Copy.txt1)我能做什么?一旦我改变了我的locale-->非Unicode程序的当前语言为希腊语,但我仍然想念德语字符,这是一些改进2)为什么c#程序依赖于此设置?是否有我应该遵循的特殊方法来避免依赖于此setting?EncodingNightmareagain:(仅仅将字符串编码为UTF8并将其作为文件名发送到FTP服务器是不够的。过去所有FTP服务器都只理解ASCII,现在要保持向后兼容性-即使它们支持Unicode-当他们开始时,他们也将所有文件都视为ASCII。为了让一切顺利进行,您(您的程序)必须首先检查您的服务器的能力。客户端连接后,服务器发送其功能-在您的情况下,你必须检查FEATUTF8。如果你的服务器发送它-这意味着它理解UTF8。但是-即使它理解-你必须明确地告诉它从现在开始你将发送你的文件名UTF8编码,现在它是你的程序缺少的东西(因为你的服务器支持utf8,正如你所说)。您的客户端必须将以下OPTSUTF8ON发送到FTP服务器。发送后,您可以使用UTF8或向您的服务器说UTF8-ish(您可以这么说)。阅读此处了解详细信息代码更改中的文件传输协议国际化:Stringftpname="ftp://ftp.myhost.gr/public_html/test"+@"/"+Uri.EscapeUriString(Program.remoteFileName);FtpWebRequest请求=(FtpWebRequest)WebRequest.Create(ftpname);To:stringremoteFileName="δοκιμαστικ?αρχε?ο-Copy.txt";Stringftpname="ftp://ftp.myhost.gr/public_html/test"+@"/"+remoteFileName;varescapedUriString=Uri.EscapeUriString(Encoding.UTF8.GetString(Encoding.ASCII.GetBytes(ftpname)));varrequest=(FtpWebRequest)WebRequest.Create(escapedUriString);需要这样做是因为EscapeUriString的输入参数根据RFC2396规范进行了转义。RFC2396标准规定:当一个新的URI方案定义一个表示由通用字符集[UCS]中的字符组成的文本数据的组件时,它应首先根据UTF-8字符编码[STD63]将数据编码为八位字节;然后只有那些不对应于未保留集中字符的八位字节才应该进行百分比编码。因此,上面显示的代码更改将强制以UTF-8格式输入此字符串。Re:2)为什么c#程序依赖于这个设置?有没有我应该遵循的特殊方法来避免这种设置依赖性?Uri.EscapeUriString需要符合RFC2396标准的输入,因此它需要以它能够理解的格式传递数据。以上就是C#学习教程:Ftp使用utf-8字符创建文件名,比如希腊语,德语等所有内容分享,如果对大家有用,需要详细了解C#学习教程,我希望大家多多关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: