c#下载文件乱码问题?

nanfei01055 2013-11-20 07:44:41
我写了个BHO拦截并下载文件
我使用HttpWebRequest下载百度网盘里的文件,可以获取到Content-Disposition, 然后获取文件名,有以下三种情况:

1.全英文没问题。

2.全中文有时没问题,大多数情况文件名乱码。

3.文件名中英文混合的一定会有问题,获取到的文件名中文部分是乱码.

代码如下,代码里本来有302跳转跟踪的,但贴出来代码就不完整了,就没贴出来:
var url = state.ToString();
HttpWebRequest request = null;
if (url.ToLower().StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}

request.AllowWriteStreamBuffering = true;
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
request.Proxy = new WebProxy { UseDefaultCredentials = true };
request.MaximumResponseHeadersLength = -1;
request.AllowAutoRedirect = false;
request.UserAgent = "TLE Retriever v1.5.8";
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "GET";
request.Headers.Add("Accept-Language", "zh-cn");
request.Headers.Add("Accept-Encoding", "gzip,deflate");
request.KeepAlive = true;
if (request == null)
return;

var response = request.GetResponse();
request.Abort();

var filename = response.Headers["Content-Disposition"];
if (string.IsNullOrWhiteSpace(filename))
return;

var pos = filename.ToLower().IndexOf("filename=");
if (pos <= 0 || pos > filename.Length - 1)
return;

filename = filename.Substring(pos + "filename=".Length);
filename = HttpUtility.UrlDecode(filename);


直到最后一句代码,获取工作已经完成,但获取的文件名是乱码,而FF和IE中显示很正常,没有乱码。
谁能给个帮助?
google了一圈,msdn中能看懂的文字都查了遍,尤其是英文论坛,我已经晕了。
搜到的结果都在说服务端怎么返回数据流,几乎没人讨论客户端怎么下载的,只能等待高人了。
...全文
208 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
琴弦里的海 2013-11-21
  • 打赏
  • 举报
回复
把下载的流转换成定义格式应该就OK了
jietuan 2013-11-21
  • 打赏
  • 举报
回复
你使用utf-8编码。

110,539

社区成员

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

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

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