От чего зависит кодировка данных, полученных из HTTP POST? - PullRequest
2 голосов
/ 07 ноября 2011

Существует один механизм, касающийся кодирования символов, с которым я действительно не знаком, и я хотел бы получить подробную информацию о том, что происходит, и я хотел бы знать, как я могу контролировать вещи в своем веб-приложении.

Когда пользователь вставляет не-ASCII-символы (например, "ä æ é à") на мой веб-сайт, скажите в форме, которая затем будет отправлена ​​POST, что именно происходит и как это определяется?

Например, если я перехожу на страницу HTML, используя кодировку iso-8859-1:

<HEAD>
 <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">

и я вырезал и вставил "ä æ é à" в окно, которое использует символы Unicode, я вижу правильные "ä æ é à" символов.

Мне не совсем понятно, что там произошло: конвертировал ли браузер символы в некоторую кодировку при чтении страницы в кодировке iso-latin-1, а затем снова преобразовывал эти символы, когда я вставлял их в другое окно?

Могу ли я программно «форсировать» кодировку, которая должна использоваться при размещении формы на веб-странице?

Будет ли браузер отвечать за правильную отправку / кодирование символов?

Могу ли я заставить кодировку, используемую в форме, отличаться от кодировки, используемой на веб-странице? (например, чтобы разрешить POSTing в UTF-8, даже если страница находится в iso-latin-1 ... Обратите внимание, что я не хочу этого делать, просто чтобы понять, что происходит под капотом).

Полагаю, мой вопрос может сводиться к: «Что мне делать, чтобы не столкнуться с проблемами кодирования?» , но если бы кто-то мог объяснить мне вышеизложенное, у меня была бы гораздо более ясная картина относительно в чем дело.

1 Ответ

2 голосов
/ 07 ноября 2011

Браузер будет использовать ту же кодировку, которая указана в атрибуте charset заголовка ответа HTTP Content-Type страницы, которая содержит форму, которую необходимо отправить.Вы можете определить его для своего собственного сайта с помощью, среди прочего, Firebug :

enter image description here

Тот, что в теге <meta> будет использоваться только тогда, когдавесь HTTP Content-Type заголовок ответа полностью отсутствует , что может произойти, если сервер не установил его (что очень маловероятно), или когда вы сохранили веб-страницу в файловой системе локального диска и затем просматривали изэто по протоколу file://.

Итак, если у вас есть проблемы с кодировкой символов, очевидно, вы (или ваш сервер) не установили атрибут charset в заголовке ответа HTTP Content-Type.В этом случае браузер сам решит, какую кодировку использовать, что часто является кодировкой платформы по умолчанию, но в некоторых случаях (например, Firefox) основывается на «умном предположении», основанном на содержимом веб-страницы.Тэг в теге <meta> - хороший запасной вариант, но он не будет использоваться, когда страница обслуживается по HTTP.

В вашей истории вопросов я вижу, что вы являетесь разработчиком Java, поэтому выВозможно, вы имеете дело со страницами JSP / Servlet (или платформами на основе JSP / Servlet), в этом случае вам может пригодиться эта статья: Юникод - Как правильно настроить символы?

...