Как кодировать кириллические символы в HTTP-запросах в Java? - PullRequest
4 голосов
/ 03 сентября 2011

Доброе время! Приложение My Adroid выполняет HTTP-запрос к одному из сервисов API Google. Конечно, это работает, когда параметр запроса на английском, но когда я тестирую свою функцию с кириллицей - я получаю 400-ошибку. Кажется, проблема в том, чтобы закодировать строку Win-1251 в UTF-8? Как это можно сделать на Java?

Ответы [ 3 ]

11 голосов
/ 03 сентября 2011

Попробуйте:

URLEncoder.encode(yourString, HTTP.UTF-8);
9 голосов
/ 03 сентября 2011

Для кодирования параметров запроса следует использовать URLEncoder#encode().

String query = "name1=" + URLEncoder.encode(value1, "UTF-8")
            + "&name2=" + URLEncoder.encode(value2, "UTF-8")
            + "&name3=" + URLEncoder.encode(value3, "UTF-8");

String url = "http://example.com?" + query;
// ...

Обратите внимание, что имена параметров на самом деле также должны быть в кодировке URL, однако в этом конкретном примере они все уже действительны. Также обратите внимание, что когда вы используете встроенный в Android API HttpClient, вам не нужно этого делать.

2 голосов
/ 03 сентября 2011

Все String объекты в Java кодируются как Unicode (UTF-16) и Unicode включает символы из символа Windows-1251 установлен.

Например, "Česká" это "\ u010Cesk \ u00E1".

Если вы хотите отправить эту строку в другое программное обеспечение, используя другой набор символов, то вам нужно преобразовать строку в байты в этот набор символов, используя класс CharsetEncoder, или используя класс OutputStreamWriter и сдача Charset.

И если вы получаете строку из другого программного обеспечения в другом символе установить затем использовать класс CharsetDecoder или InputStreamReader с Charset, чтобы преобразовать его обратно в Unicode.

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