如何处理 URISyntaxException

2022-08-31 20:09:55

我收到此错误消息:

java.net.URISyntaxException: Illegal character in query at index 31: http://finance.yahoo.com/q/h?s=^IXIC

My_Url = http://finance.yahoo.com/q/h?s=^IXIC

当我将其复制到浏览器地址字段中时,它显示了正确的页面,它是有效的,但我无法用这个解析它:URLnew URI(My_Url)

我试过了 : , 但是My_Url=My_Url.replace("^","\\^")

  1. 它不会是我需要的网址
  2. 它也不起作用

如何处理这个问题?

弗兰克


答案 1

您需要对 URI 进行编码,以将非法字符替换为合法编码字符。如果您首先创建一个URL(因此您不必自己进行解析),然后使用五参数构造函数创建URI,则构造函数将为您进行编码。

import java.net.*;

public class Test {
  public static void main(String[] args) {
    String myURL = "http://finance.yahoo.com/q/h?s=^IXIC";
    try {
      URL url = new URL(myURL);
      String nullFragment = null;
      URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), nullFragment);
      System.out.println("URI " + uri.toString() + " is OK");
    } catch (MalformedURLException e) {
      System.out.println("URL " + myURL + " is a malformed URL");
    } catch (URISyntaxException e) {
      System.out.println("URI " + myURL + " is a malformed URL");
    }
  }
}

答案 2

对字符(即)使用编码。%^http://finance.yahoo.com/q/h?s=%5EIXIC


推荐