我在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
,这是完全可解码的。