当使用 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()));
关于c# - HttpUtility.ParseQueryString() 总是将特殊字符编码为 unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26789168/