使用流编程器进行字符编码

时间:2015-07-10 10:51:48

标签: c# character-encoding streamreader

我的程序连接到ftp服务器并列出特定文件夹中的所有文件c:\ ClientFiles ...我遇到的问题是文件名有一些有趣的字符,如“Billing” “File.csv,但代码删除用短划线替换这些字符” - “。当我尝试下载未找到的文件时。

我已经尝试过Encoding类中的所有编码类型但不能容纳这些字符。

请参阅列出文件的代码。

        UriBuilder ub;
        if (rootnode.Path != String.Empty) ub = new UriBuilder("ftp", rootnode.Server, rootnode.Port, rootnode.Path);
        else ub = new UriBuilder("ftp", rootnode.Server, rootnode.Port);
        String uristring = ub.Uri.OriginalString;
        req = (FtpWebRequest)FtpWebRequest.Create(ub.Uri);
        req.Credentials = ftpcred;
        req.UsePassive = pasv;
        req.Method = WebRequestMethods.Ftp.ListDirectoryDetails;            
        try
        {
            rsp = (FtpWebResponse)req.GetResponse();
            StreamReader rsprdr = new StreamReader(rsp.GetResponseStream(), Encoding.UTF8); //this is where the problem is.

您的帮助或建议将受到高度赞赏

2 个答案:

答案 0 :(得分:1)

并非每个编码在编码命名空间中都有一个类。您可以使用以下命令获取系统中已知的所有编码列表:

 Encoding.GetEncodings()

(MSDN info for GetEncodings).

如果你知道该文件的名称应该是什么,你可以遍历列表,看看哪些编码会产生正确的文件名。

答案 1 :(得分:1)

尝试:

StreamReader rsprdr = new StreamReader(rsp.GetResponseStream(), Encoding.GetEncodings(1251)) ;

您也可以尝试“iso-8859-1”而不是1251