我有一个url编码字符串%B9q
虽然我使用C#代码:
string res = HttpUtility.UrlDecode("%B9q", Encoding.GetEncoding("Big5"));
它输出为电,这是我想要的正确答案
但是当我使用Java解码功能时:
String res = URLDecoder.decode("%B9q", "Big5");
然后我得到了输出?q
有谁知道它是如何发生的,我该如何解决?
感谢您的任何建议和帮助!
答案 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