gpt4 book ai didi

c# - HttpUtility.ParseQueryString() 总是将特殊字符编码为 un​​icode

转载 作者:可可西里 更新时间:2023-11-01 07:53:26 25 4
gpt4 key购买 nike

当使用 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.UTF8Encoding.ASCIIEncoding.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() 总是将特殊字符编码为 un​​icode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26789168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com