c# – HttpUtility.ParseQueryString()总是将特殊字符编码为unic
当从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中的字符串将是:
我已经尝试使用Encoding.UTF8,Encoding.ASCII和Encoding.Default,它们都产生相同的结果.我可以做什么来达到我想要的格式的UrlEncoding:
一如既往,提前感谢您的帮助/建议! 解决方法
问题在于:
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())); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |