带有中文字符的无效URI(Java)

无法在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 

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

 URL url = new URL(uri.toASCIIString()); 

axtavt上面的回答让我免于精神错乱,谢谢! 只有一条评论(我无法弄清楚如何在答案下面发表评论:)

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

 String s = "your_url?with=\"quotes\""; URI su = new URI (s.replaceAll("\"", "%22"); URL ur = new URL( su.toASCIIString()); 

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

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