【问题标题】:how to remove java.net.URI syntax exception如何删除 java.net.URI 语法异常
【发布时间】:2011-03-24 06:44:07
【问题描述】:

我正在使用以下代码在默认浏览器中显示 NSE 索引。

String downloadURL = "http://in.finance.yahoo.com/q;_ylt=AkieA" +
   "_4_rXXRBh2SH7_U3kXyULlG;_ylu=X3oDMTE1Nmc5cjBnBHBvcwMyBHNlY" +
   "wNmb290ZXIteWZpbmFuY2UEc2xrA25pZnR5NTA-?s=^NSEI";
java.awt.Desktop myNewBrowserDesktop = java.awt.Desktop.getDesktop();
java.net.URI myNewLocation = new java.net.URI(downloadURL);
myNewBrowserDesktop.browse(myNewLocation);

提及的网址是从雅虎网站本身复制的。但是,当我运行代码时,出现如下错误:

java.net.URISyntaxException: 非法 索引 140 处查询中的字符: http://in.finance.yahoo.com/q;_ylt=AkieA_4_rXXRBh2SH7_U3kXyULlG;_ylu=X3oDMTE1Nmc5cjBnBHBvcwMyBHNlYwNmb290ZXIteWZpbmFuY2UEc2xrA25pZnR5NTA-?s=^NSEI

我不知道出了什么问题;我已经成功地对其他 URL 做了同样的事情。请帮忙。

【问题讨论】:

标签: java


【解决方案1】:

根据这个链接:

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm 插入符号 ("^") 属于不安全类别。

“不安全的字符”为什么:一些 字符提出的可能性 在 URL 中被误解为 很多原因。这些字符 也应始终进行编码。

^ 更改为 %5E 后,它可以工作了。

现在,如果您从浏览器中复制 url 并将其放入另一个浏览器中,那么它将起作用。我认为浏览器内部会处理 special 字符。但在 java 中,java.net.URL 应该适用于独立和控制台应用程序以及不同的平台,因此,开发人员有责任负责编码 special 字符。

Google for java 基于 URL 编码器。

【讨论】:

    【解决方案2】:

    我认为你应该对你的字符串进行 URL 编码:

    URI myNewLocation = new URI(URLEncoder.encode(downloadURL, "UTF-8"));
    

    【讨论】:

      猜你喜欢
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 2011-11-12
      相关资源
      最近更新 更多