网址解码ä - > ã1/4

时间:2014-07-28 08:48:27

标签: java url utf-8 decoding

我遇到的问题是从URL解码会导致一些重大问题。请求URL包含%C3%BC作为字母'ü'。解码服务器端现在应该将其解码为ü,但它执行此操作:ü

解码是这样完成的:

decoded = URLDecoder.decode(value, "UTF-8");

虽然值包含'%C3%BC'并且解码现在应该包含'ü',但这就是问题所在。这里出了什么问题?我在多个应用程序中使用此方法,并且在所有其他情况下都可以正常运行...

2 个答案:

答案 0 :(得分:1)

我还没有足够的声誉发表评论,所以我必须尽可能接近答案。

如果你正在使用servlet,并且“value”是你在servlet上调用getParameter()得到的东西,那么它已经被servlet容器解码(正确或错误)。 (Tomcat的?)

同样,如果它是路径的一部分。您的servlet容器可能会解码它,假设百分比编码的字节是ISO-8859-1,这是Tomcat的默认设置。请参阅文档,了解Tomcat的server.xml文件中Connector元素的URIEncoding属性,如果这是您正在使用的appserver。如果将其设置为UTF-8,Tomcat将假定百分比编码的字节代表UTF-8文本。

答案 1 :(得分:0)

您可能输出错误的值。首先decoded.length()(假设为1)给出了公平的指示;你也可以转储它,Arrays.toString(decoded.toCharArray())

在Windows下的IDE控制台中,您可以看到类似于Windows单字节ANSI编码的混乱。

其余的照顾:

String s;
byte[] b;

s.getBytes()   ->   s.getBytes(StandardCharsets.UTF_8)
                    s.getBytes("Cp1252")   // Windows Latin-1

new String(b)  ->   new String(b, StandardCharsets.UTF_8)