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
,应该在使用后处理。如果您找到了问题的答案,那么您应该将其作为答案发布,而不是作为对问题的编辑。