Неверный URI с китайскими символами (Java) - PullRequest
3 голосов
/ 28 января 2011

Не удается настроить соединение 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 ]

7 голосов
/ 28 января 2011

Проблема вызвана тем, что URI.toURL() не кодирует символы в процентах, отличные от ASCII Вместо этого используйте следующее:

URL url = new URL(uri.toASCIIString());  
2 голосов
/ 24 мая 2011

Ответ Axtavt выше спас меня от безумия, спасибо! Только один комментарий (я не мог понять, как комментировать ниже ответ:)

Если вы начинаете с URL, вам нужно закодировать кавычки, прежде чем создавать URI:

String s = "your_url?with=\"quotes\"";
URI su = new URI (s.replaceAll("\"", "%22");
URL ur = new URL( su.toASCIIString());
0 голосов
/ 28 января 2011

В соответствии с URI RFC (см. Раздел 2.4), символы не-US-ASCII недопустимы в URI.Вы должны закодировать их.

0 голосов
/ 28 января 2011

Я думаю, что это связано с кодировкой "UTF-8".Загляните в эту тему , чтобы узнать больше, а также китайский язык в Java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...