URL unicode参数解码C#
我得到了一个包含参数的URL,其中一个是西里尔字母 文件编号必须为П005637-1。 我尝试了以下代码,但字符串仍然包含这些字符%u0417%u041fURL unicode参数解码C#,c#,url,unicode,C#,Url,Unicode,我得到了一个包含参数的URL,其中一个是西里尔字母 文件编号必须为П005637-1。 我尝试了以下代码,但字符串仍然包含这些字符%u0417%u041f 不可能使用HttpUtility。如果您的目标是避免依赖于System.Web.dll,则通常会在中使用等效的方法: 然而,你会发现,即使这样,你的url也不会按照你想要的方式被解码 这是因为WebUtility.UrlDecode没有故意处理%unnn转义符号。请注意下面的评论: 如评论中所述,%unnn转义格式不符合标准,应尽可能避免使
不可能使用HttpUtility。如果您的目标是避免依赖于
System.Web.dll
,则通常会在中使用等效的方法:
然而,你会发现,即使这样,你的url也不会按照你想要的方式被解码
这是因为WebUtility.UrlDecode
没有故意处理%unnn
转义符号。请注意下面的评论:
如评论中所述,%unnn
转义格式不符合标准,应尽可能避免使用。您可以从中找到更多关于这方面的信息以及正确编码URL的方法
如果您对URL如何生成有任何控制,请考虑将其更改为符合标准的。否则,考虑添加<代码> Stase.Web.DLL<代码>作为依赖关系,找到另一个第三方库来完成任务,或者编写自己的解码器。正如前面所评论的,代码就在那里。
所以使用HttpUtility中的代码;最后一段可能重复+1<代码>%unnn通常表示客户端正在使用不推荐的JavaScriptescape()
函数。这不会生成有效的URL:不仅Unicode字符的%u
转义出现,而且0x80–0xFF的%
转义也错误。到目前为止,最好的解决方法是停止使用escape()
,而是转到encodeURIComponent()
。
public static String DecodeUrlString(this String url)
{
String newUrl;
while ((newUrl = Uri.UnescapeDataString(url)) != url)
url = newUrl;
return newUrl;
}
// *** 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.