Декодирование URL японских символов и т. Д. В Java - PullRequest
3 голосов
/ 11 января 2011

У меня есть сервлет, который получает некоторые данные POST.Поскольку эти данные имеют кодировку x-www-form-urlenco, такая строка, как サ ボ テ ン, будет закодирована в サ ボ テ ン.

Как бы я расшифровал эту строку до правильных символов?Я пытался использовать URLDecoder.decode("encoded string", "UTF-8");, но это ничего не меняет.

Причина, по которой я хотел бы их расшифровать, заключается в том, что, прежде чем я отображаю эти данные на веб-странице, я выхожу изв данный момент он экранирует символ & s в закодированной строке, поэтому символы не отображаются должным образом.

Ответы [ 4 ]

5 голосов
/ 11 января 2011

Это , а не URL-кодировки . Это выглядело бы как %E3%82%B5%E3%83%9C%E3%83%86%E3%83%B3. Это десятичные сущности HTML / XML . Чтобы скрыть сущности HTML / XML, используйте Apache Commons Lang StringEscapeUtils.


Обновление в соответствии с комментариями: вы получите вопросительные знаки, когда кодировка ответа не UTF-8. Если вы используете JSP, просто добавьте следующую строку вверху страницы:

<%@ page pageEncoding="UTF-8" %>

Более подробно смотрите решения на полпути в этой статье . Я бы предпочел использовать-UTF8-all-the-way выше возиться с регулярными выражениями, поскольку регулярные выражения не готовят вас к мировому господству.

1 голос
/ 11 января 2011

Это особенность / ошибка браузеров. Если веб-страница находится в ограниченной кодировке, например, ASCII, и пользователи вводят некоторые символы вне кодировки в поле формы, браузеры отправляют эти символы в виде $#xxxx;

Это может быть проблемой, потому что если пользователи на самом деле напечатают $#xxxx;, они будут отправлены как есть. Таким образом, у сервера нет возможности различить два случая.

Лучший способ - использовать набор символов, который охватывает все символы, например UTF-8, чтобы браузеры не делали этого.

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

Как насчет регулярного выражения?

Pattern pattern = Pattern.compile("&([^a][^m][^p][^;])?");
Matcher matcher = pattern.matcher(inputStr);
String output = matcher.replaceAll("&amp;$1");
0 голосов
/ 11 января 2011

Просто дикое предположение, но вы используете Tomcat?

Если это так, убедитесь, что вы установили Соединитель в Tomcat с URIEncoding UTF-8.Google, что в Интернете, и вы найдете тонну хитов, таких как

Как заставить UTF-8 работать в веб-приложениях Java?

...