【问题标题】:URL unicode parameters decoding C#URL unicode 参数解码 C#
【发布时间】:2015-11-02 13:53:32
【问题描述】:

我得到一个包含参数的 URL,其中一个参数是西里尔字母。

http://localhost/Print.aspx?id=4&subwebid=243572&docnumber=%u0417%u041f005637-1&deliverypoint=4630013519990

文档编号必须为 ЗП005637-1。 我试过下面的代码,但字符串仍然是那些字符 %u0417%u041f.

public static String DecodeUrlString(this String url)
    {
        String newUrl;
        while ((newUrl = Uri.UnescapeDataString(url)) != url)
            url = newUrl;
        return newUrl;
    }

不可能使用 HttpUtility。

【问题讨论】:

标签: c# url unicode


【解决方案1】:

如果您的目标是避免对System.Web.dll 的依赖,那么您通常会使用WebUtility Class 中的等效方法:WebUtility.UrlDecode Method

但是,您会发现,即便如此,您的网址也不会按照您想要的方式解码。

这是因为WebUtility.UrlDecode 没有故意处理%uNNNN 转义符号。请注意source code 中的这条评论:

// *** Source: alm/tfs_core/Framework/Common/UriUtility/HttpUtility.cs
// This specific code was copied from above ASP.NET codebase.
// Changes done - Removed the logic to handle %Uxxxx as it is not standards compliant.

如评论中所述,%uNNNN 转义格式不符合标准,应尽可能避免使用。您可以从this thread 找到更多关于这方面的信息以及编码网址的正确方法。

如果您对 url 的生成方式有任何控制权,请考虑将其更改为符合标准。否则,考虑将System.Web.dll 添加为依赖项,找到另一个可以完成这项工作的第三方库,或者编写自己的解码器。正如已经评论的那样,source code 就在那里。

【讨论】:

  • +1 表示最后一段。 %uNNNN 通常表明客户端正在使用已弃用的 JavaScript escape() 函数。这不会产生有效的 URL:不仅 Unicode 字符出现 %u 转义,而且 0x80–0xFF 的 % 转义也是错误的。所以到目前为止,最好的解决办法是停止使用escape(),转而使用encodeURIComponent()
猜你喜欢
  • 2014-11-14
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 2011-07-05
  • 2017-07-26
  • 1970-01-01
  • 2012-12-24
相关资源
最近更新 更多