Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解码多重编码字符串_C#_Html Escape Characters_Unicode Escapes_String Decoding - Fatal编程技术网

C# 解码多重编码字符串

C# 解码多重编码字符串,c#,html-escape-characters,unicode-escapes,string-decoding,C#,Html Escape Characters,Unicode Escapes,String Decoding,我如何解码以得到下面的结果 /browse_ajax?action_continuation=1\u0026amp;continuation=4qmFsgJAEhhVQ2ZXdHFQeUJNR183aTMzT2VlTnNaWncaJEVnWjJhV1JsYjNNZ0FEZ0JZQUZxQUhvQk03Z0JBQSUzRCUzRA%253D%253D /browse_ajax?action_continuation=1&continuation=4qmFsgJAEhhVQ2ZXdHFQe

我如何解码以得到下面的结果

/browse_ajax?action_continuation=1\u0026amp;continuation=4qmFsgJAEhhVQ2ZXdHFQeUJNR183aTMzT2VlTnNaWncaJEVnWjJhV1JsYjNNZ0FEZ0JZQUZxQUhvQk03Z0JBQSUzRCUzRA%253D%253D

/browse_ajax?action_continuation=1&continuation=4qmFsgJAEhhVQ2ZXdHFQeUJNR183aTMzT2VlTnNaWncaJEVnWjJhV1JsYjNNZ0FEZ0JZQUZxQUhvQk03Z0JBQSUzRCUzRA%253D%253D
我已经尝试过这些,也多次使用它们,因为我读过字符串可能会被编码多次

System.Text.RegularExpressions.Regex.Unescape(string)
System.Uri.UnescapeDataString(string)
System.Net.WebUtility.UrlDecode(string)
这里哪一个函数是正确的,或者更确切地说,我需要按什么顺序调用它们才能得到结果。由于字符串不同,集合中可能会有其他特殊字符,因此自行编辑该字符串的变通方法有点太冒险了

必须对字符串进行解码才能使用新的System.Net.WebClient()。DownloadString(字符串)

编辑:因此我发现上面的语句是错误的,我不必对其进行解码就可以使用
WebClient.DownloadString(string)
。但是,下载的字符串也会遭受类似的编码。在下载之前,将
WebClient
的编码属性设置为UTF8将完成大部分工作,但是有些字符似乎仍然损坏,例如:双引号和符号,并保留
\u0026quot
\u0026amp


我不知道如何将\u0026转换为&,因此我可以更改&;以这种方式对这些字符串进行双重(实际上是三重)编码是字符串编码不正确的标志。如果你拥有编码这些字符串的代码,考虑在那里解决这个问题,这是问题的根源。

也就是说,这里是解码调用,您需要进行解码。我不推荐这种解决方案,因为它肯定是一种解决方法。同样,有问题的行为发生在进行编码的代码中

string val = "/browse_ajax?action_continuation=1\u0026amp;continuation=4qmFsgJAEhhVQ2ZXdHFQeUJNR183aTMzT2VlTnNaWncaJEVnWjJhV1JsYjNNZ0FEZ0JZQUZxQUhvQk03Z0JBQSUzRCUzRA%253D%253D";
val = System.Uri.UnescapeDataString(val);
val = System.Uri.UnescapeDataString(val);
val = System.Web.HttpUtility.HtmlDecode(val);
这将为您提供:

/browse_ajax?action_continuation=1&continuation=4qmFsgJAEhhVQ2ZXdHFQeUJNR183aTMzT2VlTnNaWncaJEVnWjJhV1JsYjNNZ0FEZ0JZQUZxQUhvQk03Z0JBQSUzRCUzRA==

如果您确实想保留等号的
%253D
编码,只需调用
Uri.UnescapeData(string)
一次。这将使等号被编码,除了作为其正确的编码值的
%3D

看起来这个谜团对我来说已经解决了,但是我再次偶然发现了它,没有找到任何内置解决方案,因为如果字符是html转义字符的一部分,这些似乎无法解码utf8


然而,由于这些似乎只使用了符号,我必须使用
Replace(@“\u0026”,“&”)
才能
HtmlDecode
并获得正确的字符串。

因为它不是一个web应用程序[说要使用
System.Net.WebUtility.HtmlDecode(字符串)不幸的是,它导致了
/browse\u ajax?action\u continuation=1\u0026amp;continuation=4qmfsgjaehvq2zdhfqeujnr183atmzt2vltnnawncajevnwjjv1jsyjnz0fezjzquzxqhqk03z0jbqsuzrua=%3
不幸的是,我不负责修复那个编码,因为这是实际的youtube代码。也许
新的System.Net.WebClient().下载字符串(string)
下载时是否会进行奇怪的编码?提供的URL经过三次编码过程。我不知道是您还是YouTube进行了编码。您是否将YouTube提供给您的文本字符串作为URI加载?如果是,请发布处理接收YouTube响应消息、提取URI并将URI作为URI加载的代码Uri对象。@Kartoffel-请不要执行
new System.Net.WebClient()。下载字符串(string)
作为
System.Net.WebClient
是一个
IDisposable
,应该在使用后处理。如果您找到了问题的答案,那么您应该将其作为答案发布,而不是作为对问题的编辑。