当前位置: 首页 > 面试题库 >

Java中的HTTP URL地址编码

席言
2023-03-14
问题内容

我的Java独立应用程序从用户那里获取URL(指向文件),我需要点击它并下载它。我面临的问题是我无法正确编码HTTP URL地址…

例:

URL:  http://search.barnesandnoble.com/booksearch/first book.pdf

java.net.URLEncoder.encode(url.toString(), "ISO-8859-1");

返回我:

http%3A%2F%2Fsearch.barnesandnoble.com%2Fbooksearch%2Ffirst+book.pdf

但是,我想要的是

http://search.barnesandnoble.com/booksearch/first%20book.pdf

(空格替换为%20)

我猜URLEncoder不是为了对HTTP URL进行编码而设计的。JavaDoc说“用于HTML表单编码的实用程序类”。还有其他方法可以做到这一点吗?


问题答案:

该java.net.URI中的类可以帮助; 在你找到的URL文档中

注意,URI类在某些情况下确实对其组件字段进行转义。建议的管理URL编码和解码的方法是使用URI

使用具有多个参数的构造函数之一,例如:

URI uri = new URI(
    "http", 
    "search.barnesandnoble.com", 
    "/booksearch/first book.pdf",
    null);
URL url = uri.toURL();
//or String request = uri.toString();

(URI的单参数构造函数不会转义非法字符)

上面的代码仅对非法字符进行转义-不会对非ASCII字符进行转义(请参见fatih的注释)。
该toASCIIString方法可用于仅获取具有US-ASCII字符的字符串:

URI uri = new URI(
    "http", 
    "search.barnesandnoble.com", 
    "/booksearch/é",
    null);
String request = uri.toASCIIString();

对于查询类似的URL http://www.google.com/ig/api?weather=São Paulo,请使用构造函数的5参数版本:

URI uri = new URI(
        "http", 
        "www.google.com", 
        "/ig/api",
        "weather=São Paulo",
        null);
String request = uri.toASCIIString();


 类似资料:
  • 介绍 收货地址编辑组件,用于新建、更新、删除收货地址。 引入 import { createApp } from 'vue'; import { AddressEdit } from 'vant'; const app = createApp(); app.use(AddressEdit); 代码演示 基础用法 <van-address-edit :area-list="areaList"

  • 本文向大家介绍java编程实现获取服务器IP地址及MAC地址的方法,包括了java编程实现获取服务器IP地址及MAC地址的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java编程实现获取服务器IP地址及MAC地址的方法。分享给大家供大家参考,具体如下: 已测系统: windows linux unix 排除127.0.0.1 和 0.0.0.0.1等非正常IP 希望本文所述对大家J

  • 我目前正在使用AltBeacon库在Android上开发我的应用程序。 使用该库,当找到信标集合时,将调用的回调,如下所示: 经过测试,我注意到与广告设备的蓝牙MAC地址不匹配。 在广告设备上,我获取蓝牙MAC地址如下: 假设的与广告商的蓝牙MAC地址不同,我错了吗?如果不同,返回的地址是什么? 我如何在广告之前获得广告设备的beacon.getBluetoothAddress()是什么? 任何关

  • 问题内容: 我的主机文件(C:\ WINDOWS \ system32 \ drivers \ etc \ hosts)具有一堆IP地址到主机名的映射: 我正在尝试找到一种通过Java API以编程方式从IPAddress转换为HostName的方法。 伪代码: 问题答案: 我从这里尝试了代码,它可以工作。即:

  • 问题内容: 在Javadoc中,Object.hashCode()指出 在合理可行的范围内,由class定义的hashCode方法确实为不同的对象返回不同的整数。(这通常是通过将对象的 内部地址 转换为整数来实现的,但是Java™编程语言不需要此实现技术。) 这是一个常见的误解,它与内存地址有关,但没有关系,因为它可以在不通知的情况下发生更改,并且hashCode()不会更改,也不得针对对象更改。

  • 问题内容: 我知道我们可以通过IE(ActiveX对象)获取用户的MAC地址。 有没有一种方法可以使用JavaScript获取用户的MAC地址? 问题答案: 我同意所有先前的答案,即如果您能够直接从Javascript执行此操作,则它将是一个隐私/安全漏洞。我可以想到两件事: 使用Java(带有签名的applet) 使用签名的Javascript,在FF(通常是Mozilla,通常在Mozilla