Uri.UnescapeDataString 在运行时不转义



我尝试使用Uri.UnescapeDataString来取消转义JavaScript编码的URL。下面是示例 URL:

https://drive.google.com/open?idu003d1n1hiV2sDFVctI8Qc9Z3EWPvEBO6KstFru0026uspu003dsharing

当我尝试在 C# 交互窗口中使用Uri.UnescapeDataString时,它正确地取消了 URL。

Microsoft (R) Roslyn C# Compiler version 2.8.3.63029
Loading context from 'CSharpInteractive.rsp'.
Type "#help" for more information.
> Uri.UnescapeDataString("https://drive.google.com/open? 
idu003d1n1hiV2sDFVctI8Qc9Z3EWPvEBO6KstFru0026uspu003dsharing)
"https://drive.google.com/open?id=1n1hiV2sDFVctI8Qc9Z3EWPvEBO6KstFr&usp=sharing"

但在实际应用中,它只是不想逃脱。我从即时窗口尝试。

? uri
"https://drive.google.com/open?id\u003d1n1hiV2sDFVctI8Qc9Z3EWPvEBO6KstFr\u0026usp\u003dsharing"
Uri.UnescapeDataString(uri) 
"https://drive.google.com/open?id\u003d1n1hiV2sDFVctI8Qc9Z3EWPvEBO6KstFr\u0026usp\u003dsharing"

溶液

下面的代码使用Newtonsoft.JsonJObject为我工作。

var json = "{"su": "" + uri + ""}";
var ss = JObject.Parse(json);
return ss["su"].Value<string>();

请注意这两个字符串的区别:

"https://drive.google.com/open?id\u003d1n1hiV2sDFVctI8Qc9Z3EWPvEBO6KstFr\u0026usp\u003dsharing"
"https://drive.google.com/open?idu003d1n1hiV2sDFVctI8Qc9Z3EWPvEBO6KstFru0026uspu003dsharing"

第一个是您在"真实"应用程序中打印出来的字符串,第二个是您在命令行解释器中键入的内容。

命令行解释器,就像编译器一样,它将\uXXXX转换为Unicode字符,而不是调用UnescapeDataString。 UnescapeDataString 解码 url 编码的字符串(如 %20 个字符(。

最好的办法是使用某种 Json 解析。对于这样简单的事情,System.Web.Script.Serialization.JavaScriptSerializer就足够了。

最新更新