首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在HttpListenerRequest中处理Url编码?

如何在HttpListenerRequest中处理Url编码?
EN

Stack Overflow用户
提问于 2011-01-13 06:24:41
回答 2查看 5.3K关注 0票数 1

我正在构建一个简单的服务器,它使用HttpListener处理请求。如果需要的话,我发送给它的查询字符串参数是url编码的。例如,要发送汉字字符串"尺八",编码为"%E5%B0%BA%E5%85%AB"

我的示例url是"/?q=%E5%B0%BA%E5%85%AB"

在我的上下文回调中,我有:

代码语言:javascript
复制
HttpListenerContext context = Listener.EndGetContext();
string rawUrl = context.Request.RawUrl;
string query = context.Request.QueryString["q"];

检查结果,我得到:

代码语言:javascript
复制
rawUrl = "/?q=%E5%B0%BA%E5%85%AB" 
query = "尺八"

但是如果我看一下context.Request.Url,我得到的是{http://localhost:8080/?q=尺八}

看起来context.Request.QueryString中的查询字符串是使用UTF-8以外的某种编码进行解码的。

我的解决方法是忽略context.Request.QueryString,并通过执行以下操作创建我自己的:

代码语言:javascript
复制
var queryString = HttpUtility.ParseQueryString(context.Request.Url.Query);

这给了我正确的值,但它看起来像是一个黑客行为。

有没有办法告诉HttpListener (或上下文,或请求)将查询字符串解释为UTF-8,我认为这是标准?或者我应该接受这个变通方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-13 06:36:05

通过查看代码,它依赖于将ContentEncoding设置为UTF8。下面是来自HttpListenerRequest的QueryString属性的代码片段:

代码语言:javascript
复制
public NameValueCollection QueryString
{
    get
    {
        NameValueCollection nvc = new NameValueCollection();
        Helpers.FillFromString(nvc, this.Url.Query, true, this.ContentEncoding);
        return nvc;
    }
}

因为没有办法修改ContentEncoding属性,所以你坚持使用你的“hack”。无论如何,我认为您使用HttpUtility.ParseQueryString可能会为您提供最好的服务。

票数 2
EN

Stack Overflow用户

发布于 2018-04-10 15:09:23

试试System.Web.HttpUtility

代码语言:javascript
复制
 string query = "d=bla bla bla";
 string encoded = System.Web.HttpUtility.UrlEncode( query, System.Text.Encoding.UTF8 );

了解更多https://msdn.microsoft.com/en-us/library/system.web.httputility(v=vs.110).aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4674696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档