URL解码C#和Java之间的差异

时间:2014-06-17 01:37:07

标签: java decode

我有一个url编码字符串%B9q

虽然我使用C#代码:

string res = HttpUtility.UrlDecode("%B9q", Encoding.GetEncoding("Big5"));

它输出为电,这是我想要的正确答案

但是当我使用Java解码功能时:

String res = URLDecoder.decode("%B9q", "Big5");

然后我得到了输出?q

有谁知道它是如何发生的,我该如何解决?

感谢您的任何建议和帮助!

2 个答案:

答案 0 :(得分:1)

据我所知relevant spec,看起来Java的处理方式是正确的。

特别是在讨论URI到IRI转换时提供的示例似乎很有意义:

  

从URI到IRI的转换不得使用任何字符编码   除了步骤3和4中的UTF-8之外,即使有可能   从上下文猜测另一个字符编码比UTF-8   在URI中使用。例如,URI   " http://www.example.org/r%E9sum%E9.html"可能会有一些猜测   解释为包含编码为iso-8859-1的两个e-acute字符。   它不能转换为含有这些e-acute的IRI   字符。否则,将来IRI将映射到   " http://www.example.org/r%C3%A9sum%C3%A9.html",这是一个不同的   来自" http://www.example.org/r%E9sum%E9.html"。

的URI

答案 1 :(得分:0)

也许Java的URLDecoder忽略了关于big5编码标准的一些规则。 C#与Chrome之类的浏览器做同样的事情,但Java的URLDecoder却没有。请参阅相关问题:https://stackoverflow.com/a/27635806/1321255