Обычно мы кодируем один раз, а затем напрямую принимаем параметры.
String para = request.getParameter(paramName); Это потому, что контейнер может автоматически декодировать (DECODE) для нас;
Вообще говоря, при кодировании используется UTF-8 (системная кодировка). Если при декодировании также используется UTF-8, то легендарные искаженные символы не появятся~.
Однако если на странице JSP используется UTF-8, но при декодировании контейнера используются другие кодировки, могут появиться искаженные символы.
В настоящее время вы обычно можете использовать:
String param = new String(request.getParameter(paramName).getBytes("ISO-8859-1"),"UTF-8");
Тоже может выйти.
Я испробовал все способы. Что мне делать, если я все еще не могу понять это?
Как решить проблему кодирования, вызванную несколькими серверами:
Предположим, строка: = "Ян";
Закодировать один раз%E9%98%B3
Дважды закодируйте %2525E9%252598%2525B3
Во второй раз контейнер автоматически декодирует, будь то GBK, UTF-8 или ISO-8859-1, он может правильно получить %E9%98%B3.
Затем, если вы выполните декодирование один раз, вы сможете получить «Янь».