100分求助 HttpWebResponse 返回的Headers内location带有中文的编码问题

Fiddlerer 2007-02-02 04:51:02
100分求助 HttpWebResponse 返回的Headers内location带有中文的编码问题

或 Content-Disposition带有中文的都不能正确识别

和某位朋友的该帖http://topic.csdn.net/t/20050531/21/4049901.html大致一样,但大家都是说发送的url的编码问题,其实不是这样
给出一个地址
http://www.yuleye.com/mirror/attachment.php?aid=1 浏览器打开后能识别出中文名: 中文名附件.jpg

但是在.net里用

myPostRequest = (HttpWebRequest)HttpWebRequest.Create(this._strUrl);//创建myPostRequest
myPostRequest.CookieContainer = new CookieContainer();//cookie容器,
myPostRequest.Referer = this.refUrl;
myPostRequest.Accept = "*/*";
myPostRequest.AllowAutoRedirect = false;
myPostRequest.ContentType = "application/octet-stream";
myPostRequest.Method = "GET";

........

/*
myPostRequest.Headers["Accept-Language"]= "zh-cn";
myPostRequest.Headers["Accept-Encoding"]= "gzip, deflate";
myPostRequest.Headers["Accept-Charset"]= "gb2312";
myPostRequest.Headers["Content-Language"]= "zh-cn";
myPostRequest.Headers["Content-Encoding"]= "gzip";
*/


this.encoding = System.Text.Encoding.GetEncoding("GB2312"); //试过UTF8 Default编码
//myPostRequest.CookieContainer.Add(this.cookiePost); 加过cookie
HttpWebResponse hwr = null;
string sLoca = "";
hwr = (HttpWebResponse)myPostRequest.GetResponse();
sLoca = hwr.Headers["Location"];

for (int ss = 0; ss < hwr.Headers.Count; ss++)
{
System.Console.WriteLine(hwr.Headers.Keys[ss]+" : "+hwr.Headers[hwr.Headers.Keys[ss]]);
}
string attstr = hwr.Headers["Content-Disposition"]; //这里正确的应该是 attachement; filename=中文名附件.jpg
但返回的是 attachement; filename=?D????t.jpg 这样的字符串 同样的问题也会出现在其他Headers里,比如上面提到的帖子里的hwr.Headers["Location"];
请问各位怎么解决,困扰好久了,可能涉及到编码 和urlencode的地方基本上试过了,请哪位给出代码测试成功了 我给全分
...全文
1002 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wshuangminlg 2007-02-03
  • 打赏
  • 举报
回复
帮LZ顶
Fiddlerer 2007-02-03
  • 打赏
  • 举报
回复
通过qqchen79(知秋一叶) 的方法可以解决,谢谢,结贴
lizhizhe2000 2007-02-03
  • 打赏
  • 举报
回复
帮顶一下1
qqchen79 2007-02-03
  • 打赏
  • 举报
回复
严格说,HTTP HEADER 只能是ASCII编码,因为Client没有办法取得HEADER的编码信息(内容编码在Header定义)。浏览器总是用当前机器的缺生编码方式解码HTTP HEADER,所以对你的例子,如果Server用GB2312 Encoding,Client用GB2312 Decoding,就没有问题。如果Client的缺生Encoding不是GB2312,就有问题了(比如我的机器,缺省Encoding是英文,UTF-8,通过你的连接就不能得到正确的中文文件名)。

.NET WebRequest总是用UTF-8解码HTTP Header(至少我没发现如何改变这种行为),所以如果Server用的是GB2312,那么结果总是不会对。唯一的办法是对string重新编码(纯粹Hack行为):

if (key == "Content-Disposition")
{
string str = res.Headers[key];
byte[] bt = new byte[str.Length];
for (int i = 0; i < str.Length; ++ i )
{
bt[i] = (byte)str[i];
}
Console.WriteLine("{0} = {1}",
key,
Encoding.GetEncoding("GB2312").GetString(bt));
}
wshuangminlg 2007-02-02
  • 打赏
  • 举报
回复
帮LZ顶
Fiddlerer 2007-02-02
  • 打赏
  • 举报
回复
To wuyazhe(wyz&xyl)

HttpWebRequest 这个地址 http://www.yuleye.com/mirror/attachment.php?aid=1
得到的 (HttpWebResponse)myPostRequest.GetResponse();
里的hwr.Headers["Content-Disposition"];

正确的结果应该是这里正确的应该是 attachement; filename=中文名附件.jpg
但不知道哪里编码问题,我的结果是 attachement; filename=?D????t.jpg 这样的字符串
兔子-顾问 2007-02-02
  • 打赏
  • 举报
回复
你想干嘛?
Fiddlerer 2007-02-02
  • 打赏
  • 举报
回复
顶啊,这么没人帮我看看呢,郁闷,是我没表达清楚吗?
请用我这个地址测试 http://www.yuleye.com/mirror/attachment.php?aid=1

110,566

社区成员

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

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

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