包含中文字符的无效URI(Java)

Joe*_*app 3 java url uri utf multibyte

无法在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() ;
Run Code Online (Sandbox Code Playgroud)

getInputStream()调用导致:

java.lang.IllegalArgumentException: Invalid uri 'http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=???????????': Invalid query
Run Code Online (Sandbox Code Playgroud)

axt*_*avt 7

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

URL url = new URL(uri.toASCIIString());  
Run Code Online (Sandbox Code Playgroud)

  • 人们也可以用以下方法获得相同的结果:`String xstr = URLEncoder.encode("维也纳恩斯特哈佩尔球场","utf-8"); URL url =新网址("http","ajax.googleapis.com","/ ajax/services/language/detect?v = 1.0&q ="+ xstr);`. (3认同)