好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
在java中HTTP URL地址编码¶ 关闭 返回上一级  

在java中HTTP URL地址编码¶
+ 查看更多

发布日期:2018-03-08 17:36
分类:JAVA
浏览次数:84
我的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 URLs编码…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的单参数构造函数不转义非法字符)
修改:添加完全限定类名,以避免与其他URI类(如apaches httpclient)混淆
修改2:
只有非法字符通过上述代码转义-它不转义非ASCII字符(参见fatih的注释)。
toASCIIString方法可用于获取仅包含US-ASCII字符的字符串:
URI uri = new URI(
    "http", 
    "search.barnesandnoble.com", 
    "/booksearch/é",
    null);
String request = uri.toASCIIString();
修改3:
对于包含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();
上一篇计算两个Java日期实例之间的差异
如何在JAVA里安全的将长整型显示转为整型?下一篇
下一篇如何在JAVA里安全的将长整型显示转为整型?

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号