URL unicode参数解码c#

本文关键字:解码 参数 unicode URL | 更新日期: 2023-09-27 18:07:08

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

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

URL unicode参数解码c#

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

然而,你会发现,即使这样,你的url也不会按照你想要的方式被解码。

这是因为WebUtility.UrlDecode故意不处理%uNNNN转义符号。请注意源代码中的注释:

// *** 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转义格式不符合标准,应尽可能避免使用。你可以在这个线程中找到更多关于这个和正确编码url的方法的信息。

如果您可以控制url的生成方式,请考虑将其更改为符合标准的。否则,考虑将System.Web.dll添加为依赖项,找到另一个第三方库来完成这项工作,或者编写自己的解码器。如前所述,源代码在那里。