#jsp #character-encoding
#jsp #кодировка символов
Вопрос:
Когда я пишу следующее
é
или даже
<%=new String(new byte[]{(byte) 0xC3, (byte) 0xA9}, "UTF-8")%>
Я получаю строку длиной 1. Она содержит один символ UTF-8 C3A9
или é
.
Но когда она записывается в браузер, браузер не может ее декодировать, если я не использую latin1. Таким образом, это означает, что он кодируется и записывается как western, хотя в верхней части JSP у меня есть
<%@page import="..." contentType="text/html" pageEncoding="UTF-8" session="false"%>
Как я могу заставить JSP выводить UTF-8 вместо записи заголовка UTF-8 и последующего кодирования с помощью latin1? «Western (ISO-8859-1)»
Комментарии:
1. Вау, что плохого в том, чтобы просто написать
é
или, может быть, на самом высоком<%="é"%>
уровне в шаблоне?2. @BalusC: Я хотел гарантировать, что проблем с кодировкой редактора не было. Отредактировано.
3. Ах, вы используете MSIE в качестве браузера?
4. @BalusC: Нет. Firefox и Chrome.
Ответ №1:
Вы должны использовать только pageEncoding
и записывать сам символ, а не ссылаться на него с помощью его кода.
Также убедитесь, что ваш .jsp
файл также закодирован в UTF-8. Ваша среда IDE должна обрабатывать pageEncoding
атрибут и устанавливать кодировку соответствующим образом, но с определенными настройками или если не используется IDE, .jsp
все равно можно закодировать в ISO-8859-1
. Измените это на UTF-8
Наконец, убедитесь, что ваш ответ действительно использует UTF-8
as encoding (используйте firebug, например). Если нет, попробуйте установить ее response.setCharacterEncoding(..)
Комментарии:
1. Заменил
<%=...%>
предложение одним символомé
. Я использую NetBeans IDE и проверил с помощью шестнадцатеричного редактора, что он правильно закодирован в UTF-8 и показывает два байтаC3A9
слева и символé
справа. Все еще это не работает. Я даже проверил сгенерированный …_jsp.java файл. Он корректно отображает тот же символ и ту же кодировку. Таким образом, проблема может быть только либо во время компиляции .java в .class, либо в кодировке во время выполнения.2. @George Bailey ну, у меня это работает. Попробуйте мое последнее предложение. Если это не сработает, значит, в вашем случае есть что-то еще, чего я не вижу.
3. Таким образом, вы уже записывали ответ перед вызовом
@page pageEncoding
? В противном случае этого не должно произойти, и это на самом деле также не является правильным решением для в JSP.@page
Должна быть самой первой строкой в JSP, и сервлет предварительной обработки — если таковой имеется — не должен был записывать ни одного символа в тело ответа.4. @BalusC: Я думаю, проблема заключалась в том, что я использовал
include
вместоforward
для вызова JSP. Я не использовалforward
, потому что это изменяет URL на путь к JSP, который никогда не является тем, что мне нужно.5.
<%@page pageEncoding="UTF-8"%>
должна быть установлена во ВСЕХ JSP, следовательно, также в родительском JSP, а не только в дочернем JSP.