1

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

考虑这个 URL: https://id2.s.nfl.com/fans/mobile/login?gigyresp=true&city= S%u00e3o+Paulo%2c+Brazil &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正确解析吗?

4

2 回答 2

2

URL enoding 是用 octets 完成的%AB。您的编码似乎是 java 字符串编码\u00e3和 URL 编码之类的混合%xxxx,这是无效的。

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

于 2012-10-15T20:29:41.337 回答
0

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

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

于 2012-10-15T20:15:05.100 回答