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

考虑以下URL:
https://id2.s.nfl.com/fans/mobile/login?gigyresp=true&city= S%u00e3o + Paulo%2c +巴西&profileURL = ...

URLDecoder在“SãoPaulo”部分特别是“ã”(似乎被编码为“%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正确解析吗?

最佳答案

URL扩展使用八位字节%AB完成。您的编码似乎是Java字符串编码\u00e3和URL编码(例如%xxxx)的混合,这是无效的。

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

10-05 19:05