Проблема кодировки символов с Tomcat
Происходит странное кодирование символов. Я использую JSP (JSTL) и Struts с Tomat 6.
У меня есть кодировка JSP-страницы как таковая:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
Проблема заключается в том, когда я пытаюсь передать URL-адрес с использованием encodeURI как таковой:
<script type="text/javascript">
$('#mailer_filter').change(function(){
var val = $(this).val();
console.log(val);
console.log(escape(val));
console.log(encodeURI(val));
location.href = 'mailList.a?' + encodeURI($(this).val());
});
</script>
параметр действия (конец Java) выглядит так:
Gaz Métro
однако на переднем конце это отображается как:
Gaz Métro
что является правильным способом. Что я могу с этим поделать??
3 ответа
Делать следующее
1) HTML-код
<meta contentType="text/html; charset="UTF-8"/>
2) Настройка браузера для IE View - Кодировка - Юникод (UTF-8)
3) Tomcat Server server.xml - в тэг Connector добавлен атрибут "URIEncoding" как
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
catalina.sh/catalina.bat - добавлено следующее
set JAVA_OPTS=--Xms256m -Xmx1024m -Xss268k -server -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Djava.awt.headless=true -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8
set CATALINA_OPTS=-Dfile.encoding="UTF-8"
4) MIME-тип ответа должен быть "application/x-www-form-urlencoded"
Вы выполнили эти шаги?
http://wiki.apache.org/tomcat/FAQ/CharacterEncoding
Скопировано ниже:
Использование UTF-8 в качестве кодировки вашего персонажа для всех - безопасная ставка. Это должно работать практически для любой ситуации.
Чтобы полностью перейти на использование UTF-8, вам необходимо внести следующие изменения:
Установите URIEncoding="UTF-8" в вашем файле server.xml. Ссылки: HTTP-коннектор, AJP-коннектор.
Используйте фильтр кодировки символов с кодировкой по умолчанию, установленной в UTF-8
Измените все ваши JSP, чтобы включить имя набора символов в их contentType.
Например, используйте
<%@page contentType="text/html; charset=UTF-8" %>
для обычных страниц JSP и<jsp:directive.page contentType="text/html; charset=UTF-8" />
для страниц в синтаксисе XML (он же JSP Documents).Измените все свои сервлеты, чтобы задать тип содержимого для ответов и включить имя набора символов в тип содержимого UTF-8.
использование
response.setContentType("text/html; charset=UTF-8")
или жеresponse.setCharacterEncoding("UTF-8")
,Измените любые библиотеки создания контента, которые вы используете (Velocity, Freemarker и т. Д.), Чтобы использовать UTF-8 и указать UTF-8 в типе контента ответов, которые они генерируют.
Отключите все клапаны или фильтры, которые могут считывать параметры запроса, прежде чем ваш фильтр кодировки символов или страница JSP сможет установить кодировку UTF-8. Для получения дополнительной информации см. http://www.mail-archive.com/users@tomcat.apache.org/msg21117.html.
Попробуйте установить для параметра URIEncoding вашего коннектора tomcat (в файле server.xml) значение UTF-8:
Например:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="UTF-8"/>