2012-06-18 4 views
9

Я пытался решить эту проблему около 7 часов.Проблема кодирования символов с 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Ã © тро

однако на переднем конце она отображается как: G аз Métro

который является правильным способом (Gaz Métro) ...

любая идея, что я могу сделать по этому поводу ??

+2

Где вы видите значение на конец Java? В файле журнала? Если это так, возможно, редактор, который вы используете для чтения файла журнала, не ожидает UTF-8 ... – atk

ответ

1

Попробуйте установить параметр 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"/> 
+0

спасибо за предложение ... Я попытался это до публикации, не решил проблему. – OakvilleWork

+0

Это не имеет никакого отношения к выходной кодировке. Он будет влиять только на значения, считанные с клиента, и только для значений параметра GET. –

6

Вы следовали эти шаги?

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8

Скопирован ниже:

Использования UTF-8, как ваша кодировка символов для всего является безопасным выбором. Это должно работать практически во всех ситуациях.

Для того, чтобы полностью переключиться на использование UTF-8, необходимо внести следующие изменения:

  1. Set URIEncoding = "UTF-8" на ваш в server.xml. Ссылки: HTTP-коннектор, AJP-коннектор.

  2. Используйте фильтр кодировки символов с кодировкой по умолчанию установлен в UTF-8

  3. Изменение всех JSPs включать имя набора символов в их CONTENTTYPE.

    Например, используйте <%@page contentType="text/html; charset=UTF-8" %> для обычных страниц JSP и <jsp:directive.page contentType="text/html; charset=UTF-8" /> для страниц в синтаксисе XML (aka JSP Documents).

  4. Измените все свои сервлеты, чтобы установить тип содержимого для ответов, и включить кодировку в типе контента, который будет UTF-8.

    Использовать response.setContentType("text/html; charset=UTF-8") или response.setCharacterEncoding("UTF-8").

  5. Измените все используемые библиотеки контента (скорость, Freemarker и т. Д.) Для использования UTF-8 и укажите UTF-8 в типе контента ответов, которые они генерируют.

  6. Отключите любые клапаны или фильтры, которые могут считывать параметры запроса, прежде чем фильтр кодировки символов или jsp-страница смогут установить кодировку в UTF-8. Для получения дополнительной информации см. http://www.mail-archive.com/[email protected]/msg21117.html.

+0

Большое спасибо, Пол ... Я пробовал все вышеперечисленное .. до сих пор не повезло, я пытался найти решение, я даже видел решения, предлагаемые для кодирования в UTF-8 вручную! Я не хочу использовать этот вариант, хотя ... в основном этот пост похож на мою проблему: http://stackoverflow.com/questions/6213377/handle-french-characters-in-java однако те предложения, т. – OakvilleWork

+0

Я видел ** 6 ** за это «в дикой природе», используя WebSphere Portal Server. Попробуйте и проследите каждый запрос, и если * anything * пытается прочитать параметр запроса до того, как будет установлена ​​правильная кодировка, значение будет считано как ISO8859-1 (если я правильно помню, это указано в спецификации сервлета). –

10

ли следующие

1) HTML код

<meta contentType="text/html; charset="UTF-8"/> 

2) Браузер Настройка для IE View - Кодирование - Unicode (UTF-8)

3) Tomcat Сервер 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 тип ответа должен быть "применение/х-WWW-форм-urlencoded"

+0

Я искал день, чтобы разобраться. Все работало отлично на Jetty, но при развертывании к tomcat мои умлауты пропали без вести. Спасибо! – Will

Смежные вопросы