我尝试使用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
就足够了。