Java中的URLDecoder扼杀了“圣保罗”

时间:2012-10-15 20:06:16

标签: java url encoding

我在Java中使用URLDecoder类来分析一些网址,我遇到了一个问题。我不确定这是一个错误还是预期的行为,所以在这里。

考虑以下网址: https://id2.s.nfl.com/fans/mobile/login?gigyresp=true&city= S%u00e3o +圣保罗%2C +巴西&安培; profileURL = ...

URLDecoder在“圣保罗”部分窒息,特别是“ã”似乎被编码为“%u0”。几乎任何其他东西似乎都处理得很好,但这个特别没有。

我正在使用以下内容:

URLDecoder.decode(url, "UTF-8");

我的堆栈跟踪是:

Caused by: java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "u0"
    at java.net.URLDecoder.decode(URLDecoder.java:173)

我有什么想法URLDecoder能正确解析这个吗?

2 个答案:

答案 0 :(得分:2)

使用八位字节%AB完成网址编码。您的编码似乎混合了java字符串编码\u00e3和URL编码,如%xxxx,这是无效的。

如果您将字符串更改为"S\u00e3o Paulo, Brazil"并使用URLEncoder.encode(url, "UTF-8")进行编码,则会获得S%C3%A3o+Paulo%2c+Brazil,这是完全可解码的。

答案 1 :(得分:0)

这似乎是Microsoft非标准编码。这是一个非法的URL,每个人都应该拒绝它。

您需要自行解码:%u####是unicode ####