Java 中的 HTTP URL 地址编码

2023-11-27

我的 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)

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


The 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 的评论)。
The toASCIIString方法可用于获取仅包含 US-ASCII 字符的字符串:

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

对于带有类似查询的 URLhttp://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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的 HTTP URL 地址编码 的相关文章

随机推荐

  • Python 写入文件返回空文件

    我正在尝试执行简单的命令将 hello world 写入文件 Python 2 7 3 default Feb 11 2013 12 48 32 GCC 4 4 6 20120305 Red Hat 4 4 6 4 on linux2 Ty
  • 如何在 Bootstrap 中将 YouTube 嵌入视频居中对齐

    我正在尝试将 YouTube 嵌入视频对齐到引导页面的页面中心 视频的大小始终相同 我的 html 看起来非常简单 div class video div 我尝试了 stackoverflow 中的不同解决方案 它只解决了将 div 居中
  • 运行 concat/uglify 后出现 Angular“状态已定义”错误

    我正在开发一个 AngularJS 应用程序 为了将代码交付到生产环境中 我使用了这个 Grunt 配置 任务 grunt registerTask compile sass compile copy compile assets ngAn
  • 使用 xelatex 进行 Rmarkdown

    我正在尝试使用 Calibri 字体 但据我了解 我首先需要能够使用 xelatex 引擎 这就是我遇到问题的地方 示例代码和错误如下 请注意 我对乳胶很陌生 所以我很可能错过了一些明显的东西 如果重要的话 我安装了 MikTeX 2 9
  • 我可以覆盖 std::hash 吗?

    我可以替换实际的实现std hash用我自己的定义std hash在 C 11 中 我的意思是来自我的代码库 而不触及标准库 在这种情况下 我看不到虚拟函数 多态性有任何用处 所以我想我无论如何都无法改变 std hash 的定义 您可以将
  • 避免 DELETE 查询中的自引用

    我正在尝试删除其名称下不是最新版本的所有记录 但显然您无法引用访问您在同一查询中修改的表 我尝试了这个 但由于上述原因它不起作用 DELETE FROM table WHERE CONCAT name version NOT IN SELE
  • 使用java加密和解密密码使用什么API和算法

    我目前正在使用 Java 创建应用程序 我在 google 上搜索了 java 密码加密 但结果如此巨大 我感到不知所措 如何使用 Java 加密和解密密码 加密和解密密码的最佳实践是什么 我猜 MD5 不是一种可行的方法 因为它是一种单向
  • 如何从包含多个 GzipStream 的文件中读取

    我有一个使用代码创建的文件 如下所示 using var fs File OpenWrite tmp using GZipStream gs new GZipStream fs CompressionMode Compress true u
  • package code.google.com/p/go.example/hello: exec: "hg": 在 %PATH% 中找不到可执行文件。如何获取远程golang包?

    我按照 Golang 教程中写的那样做http golang org doc code html remote 我的环境设置 C sbox go example gt set go GOPATH C sbox go example GORO
  • Android OpenGL ES Framebuffer 对象 - 将深度缓冲区渲染到纹理

    我使用的 Android 设备运行 Froyo 支持 OpenGL ES 1 1 和 OpenGL ES 2 0 我想将深度缓冲区渲染为纹理 在看过其他平台 包括 iPhone 上的 OpenGL OpenGL ES 的许多示例后 我尝试了
  • AJAX 文件上传/表单提交无需 jquery 或 iframe?

    是否可以在没有 jQuery 或 IFrames 的情况下进行 AJAX 表单提交 因此只需纯 JavaScript 我目前正在发送到一个可以工作的struts fileUploadAction 该操作的代码是否仍适用于异步提交 或者是否需
  • 我可以在 iOS 上将 HTTP 缓存与 NSURLSessionDownloadTask 一起使用吗?

    我正在尝试使用NSURLSessionDownloadTask 并利用 Apple 内置的 URL 缓存功能 我已经成功地让缓存在使用时起作用NSURLSessionDataTask使用下面的代码 void downloadUsingNSU
  • Haskell 管道和分支

    Problem 我正在尝试使用 Haskell 和 Pipes 库实现一个简单的 Web 服务器 我现在明白循环或菱形拓扑对于管道是不可能的 但我认为我正在尝试这样做 我想要的拓扑结构是 GET gt handleGET gt gt pac
  • 即使在deleteLocalRef之后jni表也会溢出

    当我运行代码时 出现错误 无法添加到 JNI 本地引用表有 512 个条目 这是我的代码 jstring pJNIData pJNIEnv gt NewStringUTF variables 0 GetStringValue pJNIEnv
  • 如何使用自托管 ServiceStack 忽略路由

    我目前正在开发一个解决方案 我们有一个正在运行的自托管 ServiceStack 层 但问题是当我从浏览器访问它并且浏览器尝试获取网站图标时 我不断收到错误 据我所知 在运行自托管时没有忽略特定路由的选项吗 我会想象类似的事情 Routes
  • 如何使用 python 替换/删除 pdf 中的文本? [复制]

    这个问题在这里已经有答案了 我有隐藏 pdf 部分的代码 只需用白色多边形覆盖它 但问题是 文本仍然是there 如果你按 ctrl f 仍然可以找到它 我的目标是实际从 pdf 本身中删除文本 使用 pdfminer 我设法从 pdf 中
  • 为什么 App_Offline 一旦开始加载 dll 就无法工作?

    有人可以帮我解决这个问题吗 在生产站点上 app offline htm 仅在您开始上传 dll 之前有效 一旦您开始上传 dll 它就会抛出以下错误 无法加载文件或程序集 SubSonic 或其依赖项之一 该进程无法访问该文件 因为该文件
  • 关于使用 tf.image.crop_and_resize

    我正在研究适用于 fast rcnn 的 ROI 池化层 并且我习惯使用张量流 我发现tf image crop and resize可以充当 ROI 池化层 但我尝试了很多次都无法得到我期望的结果 或者真正的结果正是我得到的吗 这是我的代
  • sprintf 何时以及为何会失败?

    我正在使用 swprintf 将字符串构建到缓冲区中 使用循环等 const int MaxStringLengthPerCharacter 10 1 wchar t pTmp pBuffer for size t i 0 i lt nNu
  • Java 中的 HTTP URL 地址编码

    我的 Java 独立应用程序从用户那里获取一个 URL 指向一个文件 我需要点击它并下载它 我面临的问题是我无法正确编码 HTTP URL 地址 例子 URL http search barnesandnoble com booksearc