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

标签 c# asp.net http query-string

当使用 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/

相关文章:

c# - 从 MainWindow 访问类中的方法

c# - 哪里返回错误记录

c# - ASP.NET C#通过FTPwebRequest上传MemoryStream内容问题

asp.net - 程序集不允许部分信任的调用者

http - HTTP header 值的可能类型

html - 从 formbuilder 中获取一个 id 以删除 Angular 6 中的一行

c# - Windows 窗体 anchor ,以相同的比例保持面板内的控件?

c# - Glass.Mapper.Sc 默认全局设置 inferType 为 true

c# - 通过表单 POST 发送 Base64 数据图像

php - 使用 PECL HTTP 类在 PHP 中进行并行 HTTP 请求 [答案 : HttpRequestPool class]