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