3

使用 URL 中的汉字设置 URL 连接时遇到问题。它适用于拉丁字符:

String xstr = "维也纳恩斯特哈佩尔球场" ;
URI uri = new URI("http","ajax.googleapis.com","/ajax/services/language/detect","v=1.0&q="+xstr,null);   
URL url = uri.toURL(); 
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream() ;

getInputStream() 调用导致:

java.lang.IllegalArgumentException: Invalid uri 'http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=???????????': Invalid query
4

4 回答 4

7

URI.toURL()问题是由于不对非 ASCII 字符进行百分比编码的事实引起的。请改用以下内容:

URL url = new URL(uri.toASCIIString());  
于 2011-01-28T18:26:15.457 回答
2

上面axtavt的回答使我免于精神错乱,谢谢!只有一条评论(我不知道如何在答案下方发表评论:)

如果以 URL 开头,则需要在构建 URI 之前对引号进行编码:

String s = "your_url?with=\"quotes\"";
URI su = new URI (s.replaceAll("\"", "%22");
URL ur = new URL( su.toASCIIString());
于 2011-05-23T21:38:25.443 回答
0

我认为它与“UTF-8”字符集有关。看看这个主题以了解更多信息以及这个java 中的中文

于 2011-01-28T17:53:01.630 回答
0

根据URI RFC(参见第 2.4 节),非 US-ASCII 字符在 URI 中无效。您必须对它们进行编码。

于 2011-01-28T18:03:50.567 回答