2012-10-15 31 views
1

我在URLDecoder類中玩了一下Java,分析了一些URL,並且遇到了問題。我不確定它是一個錯誤還是預期的行爲,所以在這裏。「聖保羅」中的Java扼流圈中的URLDecoder

考慮一下這個網址: https://id2.s.nfl.com/fans/mobile/login?gigyresp=true&city=S%u00e3o +聖保羅%2C +巴西 & profileURL = ...

URLDecoder是對 「聖保羅」 部分窒息,特別是 「A」,這似乎被編碼爲「%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

如果我把它放到一個URLEncoder在線上,我會得到'S%C3%A3o%20Paulo' –

+1

這不是一個正確的URL編碼字符串 - 編碼百分比的字節只能從%00到%FF。你將不得不使用URLDecoder以外的東西。 – Alex

回答

2

URL enoding與八位字節%AB完成。您的編碼似乎是Java字符串編碼\u00e3和URL編碼如%xxxx的組合,這是無效的。

如果將字符串更改爲"S\u00e3o Paulo, Brazil"並使用URLEncoder.encode(url, "UTF-8")對其進行編碼,則會得到S%C3%A3o+Paulo%2c+Brazil,這是完全可解碼的。

+0

感謝您的詳細信息。不幸的是,這些網址並不是我能控制的,這些網址是來自廣告服務器的引用者,需要按原樣進行解析。不知道爲什麼會發生這種情況,但我必須在解析過程中找到解決方法。 –

+0

請參閱[編碼百分比 - 維基百科](http://en.wikipedia.org/wiki/Percent-encoding#Non-standard_implementations),其中詳細闡述了'%uxxxx'編碼。 –

0

這似乎是Microsoft非標準編碼。這是一個非法的網址,每個人都應該拒絕。

你需要它自己解碼:%u####是Unicode ####