JSP необходимо «закодировать» дважды. На первом этапе будет использоваться pageEncoding, на втором этапе — от utf-8 до utf-8, а на третьем этапе — веб-страница, созданная Tomcat с использованием contentType.
Что касается разницы между атрибутами pageEncoding и contentType на страницах JSP:
pageEncoding — это кодировка самого файла jsp.
Кодировка contentType относится к кодировке контента, когда сервер отправляет его клиенту.
JSP необходимо «закодировать» дважды. На первом этапе будет использоваться pageEncoding, на втором этапе — от utf-8 до utf-8, а на третьем этапе — веб-страница, созданная Tomcat с использованием contentType.
Первый этап — скомпилировать jsp в .java. Он будет читать jsp в соответствии с настройкой pageEncoding. В результате указанная схема кодирования преобразуется в унифицированный исходный код JAVA UTF-8 (т. е. если pageEncoding). Неправильные настройки. Или настройки отсутствуют, и в результате появляются искаженные китайские символы.
Второй этап — это компиляция исходного кода JAVA JAVAC в byteCode Java. Независимо от того, какая схема кодирования используется при написании JSP, все результаты этого этапа представляют собой исходные коды Java в кодировке UTF-8.
JAVAC использует кодировку UTF-8 для чтения исходного кода Java и компиляции его в двоичный код кодировки UTF-8 (т.е. .class). Это спецификация JVM для выражения константных строк в двоичном коде (кодировка Java).
Третий этап заключается в том, что Tomcat (или его контейнер приложения) загружает и выполняет двоичный код JAVA со второго этапа. Результатом вывода является то, что видно на клиенте. На этом этапе параметр contentType, скрытый на первом и втором этапах, работает.
Настройка типа контента.
По умолчанию для pageEncoding и contentType установлены значения ISO8859-1. Если вы случайно установите один из них, другой будет таким же (это относится к TOMCAT4.1.27, но это не является абсолютным, это зависит от метода обработки). каждый JSPC pageEncoding не равен contentType, что более удобно для разработки и отображения текстовых веб-страниц JSP CJKV в Азии (например, pageEncoding=GB2312 не равен contentType=utf-8).
Файл jsp не похож на .java. Когда компилятор читает .java, по умолчанию используется кодировка, соответствующая языковому стандарту, установленному операционной системой. Вообще, пишем ли мы код в Блокноте или в ue, если нет специального перекодирования, то будет записан контент в локальном формате кодировки. Следовательно, метод, принятый компилятором, может просто позволить виртуальной машине получить правильные данные.
Но это не относится к файлам jsp. В нем нет процесса перекодирования по умолчанию, но правильного перекодирования можно добиться, указав pageEncoding.
Например:
<%@ page contentType="text/html;charset=utf-8" %>
Большинство из них распечатывают искаженные символы, потому что введенное мной «Как дела» взято из gbk, но неизвестно, правильно ли сервер уловил «Как дела».
Просто измените его на следующее содержимое
<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK"%>