解码C#的URL unicode参数

时间:2015-08-10 15:09:57

标签: c# url unicode

我有一个包含参数的网址,其中一个是西里尔字母。

  

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

Doc-number必须ЗП005637-1。 我尝试了以下代码,但字符串仍然包含%u0417%u041f 这些字符。

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

使用HttpUtility是不可能的。

1 个答案:

答案 0 :(得分: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上找到有关此问题以及编码网址的正确方法的更多信息。

如果您可以控制网址的生成方式,请考虑将其更改为符合标准。否则,请考虑添加System.Web.dll作为依赖项,找到另一个执行该作业的第三方库,或编写自己的解码器。已经评论过,source code就在那里。