我在 Java 中使用 URLDecoder
类来分析一些 url,但遇到了一个问题。我不确定这是一个错误还是预期的行为,所以就是这样。
考虑这个网址: https://id2.s.nfl.com/fans/mobile/login?gigyresp=true&city= S%u00e3o+Paulo%2c+巴西&profileURL=...
URLDecoder
对“São Paulo”部分感到窒息,尤其是“ã”,它似乎被编码为“%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
,这是完全可解码的。
关于java - Java 中的 URLDecoder 在 "São Paulo"处阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12903168/