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

前端之家收集整理的这篇文章主要介绍了c# – HttpUtility.ParseQueryString()总是将特殊字符编码为unicode前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当从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()));
原文链接:https://www.f2er.com/csharp/94014.html

猜你在找的C#相关文章