1: Форма отправляет данные на переднем плане в режиме публикации:
Когда браузер отправляет данные (предположительно «Китай») на сервер, он должен искать кодовую таблицу при преобразовании данных в двоичные данные 0101 (предположительно 98 99, какую кодовую таблицу использует браузер для открытия). веб-странице, браузер укажет, с какой кодовой таблицей отправлять данные. После того, как данные достигнут сервера, данные (98 99) должны быть инкапсулированы в запрос. Вызов метода getParameter запроса в сервлете возвращает строку («Китай»). После получения числа внутри метода оно должно быть. преобразованы в символы. Обязательно проверьте таблицу кода, поскольку разработчик запроса является иностранцем, по умолчанию используется стандарт ISO8859-1, который у них обычно используется. Это источник искаженных данных запроса.
Скопируйте код кода следующим образом:
пакет com.yyz.request;
импортировать java.io.IOException;
импортировать java.io.PrintWriter;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServlet;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
//Отправляем форму в режиме публикации
общественный класс RequestDemo расширяет HttpServlet {
public void doGet (запрос HttpServletRequest, ответ HttpServletResponse)
выдает ServletException, IOException {
//Китайская искаженная проблема с запросом данных
request.setCharacterEncoding("UTF-8");//Мы контролируем веб-страницу клиента в формате UTF-8
Строка username = request.getParameter("username");
//Получение данных происходит нормально, при выводе данных можно проверять разные кодовые таблицы
response.setCharacterEncoding("gb2312");//Уведомляем сервер о таблице кодов, с которой нужно обращаться при отправке данных
response.setContentType("text/html;charset=gb2312");//Сообщаем браузеру, с какой кодовой таблицей открывать
PrintWriter out = response.getWriter();
out.write(имя пользователя);
}
public void doPost (запрос HttpServletRequest, ответ HttpServletResponse)
выдает ServletException, IOException {
doGet (запрос, ответ);
}
2: Форма отправляет данные на переднем плане в режиме получения:
Данные, отправленные в методе get, по-прежнему отправляются с использованием таблицы кодов, используемой браузером для их открытия. Разница в том, что при отправке данных в режиме получения кодировка параметра запроса недействительна. Даже если установлен UTF-8, ISO8859-1 все равно будет проверяться. Получить (??). Чтобы решить эту проблему, вам нужно использовать (??) для обратной проверки ISO8859-1. После получения (98 99) проверьте правильную таблицу кодов.
Скопируйте код кода следующим образом:
пакет com.yyz.request;
импортировать java.io.IOException;
импортировать java.io.PrintWriter;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServlet;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
//Отправляем форму через метод get
общественный класс RequestDemo расширяет HttpServlet {
public void doGet (запрос HttpServletRequest, ответ HttpServletResponse)
выдает ServletException, IOException {
//Китайская искаженная проблема с запросом данных
request.setCharacterEncoding("UTF-8");//При отправке данных в режиме получения кодировка настройки запроса недействительна. Даже если установлен UTF-8, ISO8859-1 все равно будет проверяться.
Строка username = request.getParameter("username");
System.out.println(имя пользователя);
источник байтов [] = username.getBytes("iso8859-1");
имя пользователя = новая строка (источник, «UTF-8»);
System.out.println(имя пользователя);
}
public void doPost (запрос HttpServletRequest, ответ HttpServletResponse)
выдает ServletException, IOException {
doGet (запрос, ответ);
}
}
Третье: Краткое описание проблемы искажения китайских иероглифов в представленных данных:
1. Если метод отправки — post, вам нужно установить кодировку объекта запроса только в том случае, если вы хотите избежать искажения символов.
Примечание. Способ отправки данных клиента зависит от того, какая кодировка должна быть установлена в запросе.
2. Если метод отправки — get, установка недопустимой кодировки объекта запроса. Если вы хотите избежать искажения символов, вы можете преобразовать его только вручную.
String data = "???????";//искаженная строка
byte source [] = data.getBytes("iso8859-1");//Получаем исходные данные, отправленные клиентом
data = новая строка (data.getBytes("iso8859-1"),"UTF-8");//решаем искаженные символы
//Равно
данные = новая строка (источник, «UTF-8»);
3. Искаженный код в методе get также может быть вызван изменением конфигурации сервера. Измените файл server.xml в каталоге conf Tomact.
3.1
Этот подход не рекомендуется, поскольку он меняет сервер и не является гибким.
3.2
После этого параметра любая кодировка, заданная параметром setCharacterEncoding запроса, будет использоваться соединителем. Хотя это более гибкое, чем предыдущее изменение, оно все равно приведет к жесткой зависимости нашего приложения от сервера и не рекомендуется.
Четвертое: Наконец, позвольте мне упомянуть небольшую деталь: если за URL-адресом следуют китайские данные, он должен быть закодирован в URL-адресе. Параметры, представленные в форме, включают данные на китайском языке, и браузер автоматически поможет нам их закодировать. Однако, если китайские параметры передаются напрямую по ссылке, браузер не поможет нам их закодировать. В этом случае мы хотим решить. проблема с искаженными китайскими символами с помощью второго метода, описанного выше. Иногда это не работает. Сначала следует закодировать его с помощью URLEncoding.encode(,"UTF-8").