Кто-нибудь знает, как заставить текущие браузеры добавлять кодировку в заголовок Content-Type?
Нет, ни один браузер никогда не предоставлял параметр charset
с типом носителя application/x-www-form-urlencoded
. Более того, спецификация HTML, которая определяет этот тип, не предлагает параметр charset
, поэтому сервер не может разумно ожидать его получения.
(HTML4 ожидает ожидание charset
для частей части multipart/form-data
, но даже в этом случае браузер на самом деле не соответствует.)
Accept-Charset = "UTF-8"
accept-charset
не работает в IE и не должен использоваться. В любом случае это не будет иметь никакого значения для форм на страницах, обслуживаемых как UTF-8, но в других случаях это может привести к противоречивым результатам.
Нет, с формами вам просто нужно обслуживать страницу, на которой они находятся как UTF-8, а результаты должны возвращаться как UTF-8 (без опознавательных знаков, сообщающих вам об этом (за исключением потенциально _charset_
взломать , но Tomcat этого не поддерживает).
Таким образом, вы должны указать контейнеру сервлета, какую кодировку использовать для параметров, если вы не хотите, чтобы он возвращался к значениям по умолчанию (что обычно неверно). В некоторых случаях вы можете вызвать ServletRequest.setCharacterEncoding()
, чтобы сделать это, но это, как правило, хрупко и совсем не работает для параметров, взятых из строки запроса. К сожалению, для этого нет стандартизированного исправления на уровне сервлетов. Для Tomcat вам обычно нужно разбираться с server.xml вместо того, чтобы исправить это в приложении.