当我通过URL的InputStream读取xml,然后删除除URL之外的所有内容时,我得到“http://cliveg.bu.edu/people/sganguly/player/%20Rang%20De%20Basanti%20-%20Tu%20Bin%20Bataye.mp3“。
如您所见,有很多“%20“。
我希望网址是unescape。
有没有办法在Java中做到这一点,而不使用第三方库?
当我通过URL的InputStream读取xml,然后删除除URL之外的所有内容时,我得到“http://cliveg.bu.edu/people/sganguly/player/%20Rang%20De%20Basanti%20-%20Tu%20Bin%20Bataye.mp3“。
如您所见,有很多“%20“。
我希望网址是unescape。
有没有办法在Java中做到这一点,而不使用第三方库?
4条答案
按热度按时间63lcw9qa1#
这不是未转义的XML,这是URL编码的文本。在我看来,你想在URL字符串上使用以下代码。
这将给予你正确的文本。解码的结果像你提供的是这样的。
%20是一个转义的空格字符。为了得到上面的字符,我使用了URLDecoder对象。
t9aqgxwy2#
从Java 11开始使用
一个月。
对于Java 7/8/9,请使用
URLDecoder.decode(url, "UTF-8")
。URLDecoder.decode(String s)
自Java 5起已弃用关于所选编码:
注:万维网联盟建议书规定应使用UTF-8。不这样做可能会导致不兼容。
r6l8ljro3#
当我有
á
、é
、í
等特殊字符时,我在使用这种方法时遇到了问题。我(可能是疯狂的)猜测是宽字符没有被正确编码......嗯,至少我希望看到%uC2BF
而不是%C2%BF
这样的序列。编辑:我的错,这篇文章解释了URL编码和JavaScript转义序列之间的区别:URI encoding in UNICODE for apache httpclient 4
ih99xse14#
在我的例子中,URL包含转义的html实体,因此apache-commons中的
StringEscapeUtils.unescapeHtml4()
可以实现这个目的