加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – HttpUtility.ParseQueryString()总是将特殊字符编码为unic

发布时间:2020-12-15 03:42:19 所属栏目:百科 来源:网络整理
导读:当从System.Web使用HttpUtility时,我发现每次我调用该方法.ParseQueryString我有特殊的字符编码到它们的unicode等效表示.我尝试过许多不同的编码类型,似乎都产生了相同的结果.我的代码示例如下: string text = "ich m?chte diese Bild für andere freigebe
当从System.Web使用HttpUtility时,我发现每次我调用该方法.ParseQueryString我有特殊的字符编码到它们的unicode等效表示.我尝试过许多不同的编码类型,似乎都产生了相同的结果.我的代码示例如下:
string text = "ich m?chte diese Bild für andere freigeben"
var urlBuilder = new UriBuilder(url);
var query = HttpUtility.ParseQueryString(urlBuilder.Query,Encoding.UTF8);
query["text"] = text;    
urlBuilder.Query = query.ToString();
string finalUrl = urlBuilder.ToString();

而我将从这个接收到的finalUrl中的字符串将是:

text=ich+m%u00f6chte+diese+Bild+f%u00fcr+andere+freigeben

我已经尝试使用Encoding.UTF8,Encoding.ASCII和Encoding.Default,它们都产生相同的结果.我可以做什么来达到我想要的格式的UrlEncoding:

text=ich%20m%C3%B6chte%20diese%20Bild%20f%C3%BCr%20andere%20freigeben

一如既往,提前感谢您的帮助/建议!

解决方法

问题在于:
urlBuilder.Query = query.ToString();

HttpUtility.ParseQueryString返回一个NameValueCollection,但实际上是一个名为HttpValueCollection的内部类.该类具有ToString()方法的覆盖.它生成编码的查询字符串,但是对于其URL编码,它使用HttpUtility.UrlEncodeUnicode(tinyurl.com/HttpValue).这导致%uXXXX值.

如果您需要不同类型的URL编码,您可能希望避免使用HttpUtility.ParseQueryString或解析ToString()的结果,然后对其进行编码:

urlBuilder.Query = Uri.EscapeUriString(HttpUtility.UrlDecode(query.ToString()));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读