URISyntaxException查询中的非法字符

时间:2013-09-02 13:11:57

标签: java uri

我正在尝试在默认浏览器中打开一个链接。我使用了以下代码。

String myUrl = "http://www.example.com/engine/myProcessor.jsp?Type=A Type&Name=1100110&Char=!"; 

        try {
            Desktop.getDesktop().browse(new URI(myUrl));
        } catch (IOException err) {
            setTxtOutput("Error: "+err.getMessage());
        } catch (URISyntaxException err) {      
            setTxtOutput("Error: "+err.getMessage());
        } catch (Exception err) {
            setTxtOutput("Error: "+err.getMessage());
        }

我收到 URISyntaxException 索引中的非法字符

我认为这是因为我的网址中包含& 等字符。我尝试使用:

URLEncoder.encode(myUrl, "UTF-8");

但这给了我另一个错误。

Failed to open http%3A%2F%2Fwww.example.com%2F........... 
The system cannot find the file specified.

请告诉我如何纠正 URISyntaxException非法字符错误。

5 个答案:

答案 0 :(得分:3)

您不应对整个URL进行编码,因为URI类需要有效的协议。仅对参数进行编码

myUrl = "http://www.example.com/engine/myProcessor.jsp?" + URLEncoder.encode("Type=A Type&Name=1100110&Char=!", "UTF-8");

答案 1 :(得分:2)

您可以使用以下代码段

public static String encode(String queryParameter) {
    try {
        String encodedQueryParameter = URLEncoder.encode(queryParameter, "UTF-8");
        return encodedQueryParameter;
    } catch (UnsupportedEncodingException e) {
        return "Issue while encoding" + e.getMessage();
    }
}

答案 2 :(得分:1)

这是因为这里有空格...jsp?Type=A Type&...,您可以将其替换为+

http://www.example.com/engine/myProcessor.jsp?Type=A+Type&Name=1100110&Char=!"

答案 3 :(得分:0)

将URL中的空格替换为+ like如果url包含category = Adult Care,则将其替换为category = Adult + Care。

答案 4 :(得分:0)

以下代码对我有用:

{{1}}