我在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
能正确解析这个吗?
答案 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 ####