在网址中设置包含中文字符的网址连接时遇到问题。它适用于拉丁字符:
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
答案 0 :(得分:7)
问题是由URI.toURL()
未对非ASCII字符进行百分比编码这一事实引起的。请改用以下内容:
URL url = new URL(uri.toASCIIString());
答案 1 :(得分:2)
axtavt上面的回答让我免于精神错乱,谢谢!只有一条评论(我无法弄清楚如何在答案下方发表评论)。
如果您从URL开始,则需要在构建URI之前对引号进行编码:
String s = "your_url?with=\"quotes\"";
URI su = new URI (s.replaceAll("\"", "%22");
URL ur = new URL( su.toASCIIString());
答案 2 :(得分:0)
我认为它与“UTF-8”字符集有关。请查看此topic以了解详情以及此chinese in java
答案 3 :(得分:0)
根据URI RFC(参见第2.4节),非US-ASCII字符在URI中无效。你必须编码它们。