Каков наиболее эффективный способ форматирования строк UTF-8 в Java? - PullRequest
0 голосов
/ 21 июля 2010

Я делаю следующее:

String url = String.format(WEBSERVICE_WITH_CITYSTATE, cityName, stateName);
String urlUtf8 = new String(url.getBytes(), "UTF8");
Log.d(TAG, "URL: [" + urlUtf8 + "]");
Reader reader = WebService.queryApi(url);

Вывод, который я ищу, по сути, состоит в том, чтобы получить название города с пробелами (например, "Overland Park") в формате Overland%20Park.

Это лучший способ?

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Простой ответ - использовать URLEncoder.encode(...), как указано @Recurse. Однако, если часть или весь URL-адрес уже был закодирован, это может привести к двойному кодированию. Например:

http://foo.com/pages/Hello%20There

или

http://foo.com/query?keyword=what%3f

Другая проблема, связанная с URLEncoder.encode(...), заключается в том, что он не понимает, что в некоторых контекстах следует экранировать некоторые символы, а в других - нет. Так, например, "?" в параметре запроса должен быть экранирован, но '?' который отмечает начало «части запроса», не должен быть экранирован.

Я думаю, что более безопасный способ добавить пропущенные escape-коды будет следующим:

String safeURI = new URI(url).toASCIIString();

Однако я не проверял это ...

1 голос
/ 21 июля 2010

Предполагая, что вы действительно хотите закодировать вашу строку для использования в URL (т. Е. «Overland Park» также можно отформатировать как «Overland + Park»), вам нужно URLEncoder.encode(url, "UTF-8"). Другие небезопасные символы будут преобразованы в запрашиваемый вами формат% xx.

...