当我通过 URL 的 InputStream 读取 xml,然后删除除 url 之外的所有内容时,我得到“ http://cliveg.bu.edu/people/sganguly/player/%20Rang%20De%20Basanti%20-%20Tu% 20Bin%20Bataye.mp3 ".
如您所见,有很多“%20”。
我希望 url 不转义。
有没有办法在 Java 中做到这一点,而不使用第三方库?
当我通过 URL 的 InputStream 读取 xml,然后删除除 url 之外的所有内容时,我得到“ http://cliveg.bu.edu/people/sganguly/player/%20Rang%20De%20Basanti%20-%20Tu% 20Bin%20Bataye.mp3 ".
如您所见,有很多“%20”。
我希望 url 不转义。
有没有办法在 Java 中做到这一点,而不使用第三方库?
这不是未转义的 XML,这是 URL 编码的文本。在我看来,您想在 URL 字符串上使用以下内容。
URLDecoder.decode(url);
这将为您提供正确的文本。解码您提供的类似内容的结果是这样的。
http://cliveg.bu.edu/people/sganguly/player/ Rang De Basanti - Tu Bin Bataye.mp3
%20 是转义的空格字符。为了获得上述内容,我使用了 URLDecoder 对象。
URLDecoder.decode(url, StandardCharsets.UTF_8)
.对于 Java 7/8/9 使用URLDecoder.decode(url, "UTF-8")
.
URLDecoder.decode(String s)
自Java 5起已被弃用
关于选择的编码:
注意:万维网联盟建议规定应使用UTF-8 。不这样做可能会引入不兼容性。
当我有 , , 等特殊字符时,我在使用这种方法时遇到了问题á
。é
我í
的(可能是疯狂的)猜测是宽字符没有被正确编码......好吧,至少我期待看到像%uC2BF
而不是%C2%BF
.
编辑:我的错,这篇文章解释了 URL 编码和 JavaScript 的转义序列之间的区别:URI encoding in UNICODE for apache httpclient 4