2011-01-04 2 views
2

Я пробовал вещи весь день, но не могу получить правильное решение. Моя проблема: я разрабатываю приложение Spring MVC на своем локальном Tomcat. Моя база данных MySQl имеет набор кодировок UTF-8, все содержимое там отображается правильно при использовании phpMyAdmin. Также вывод в файлах LOG с использованием log4j в файле catalina.out отлично работает.Проблема с кодировкой странного символа с Eclipse/Spring/Tomcat 6

Мои JSP-страницы настраиваются

<!-- encoding --> 
<%@ page contentType="text/html; charset=UTF-8" %> 
<%@ page pageEncoding="UTF-8" %> 

показывает также данные на моем JSP работает отлично. Я также могу отправлять данные с моего контроллера без какого-либо интерференции БД с использованием специальных символов, например.

String str = "UTF-8 Test: Ä Ö Ü ß è é â"; 
logger.debug(str); 
mav.addObject("utftest", str); 

Это показывает правильно в журнале и на странице JSP в браузере.

НО: При наличии специальных символов непосредственно в моем JSP-файле, например. для текста в заголовках это не работает. FF и Google Chrome отображают странные символы, но сообщают, что страница UTF-8. При переключении на латиницу символы становятся все более странными.

Такая же проблема при отображении текстовых токенов из моего файла messages.properties, хотя Eclipse говорит, что при щелчке правой кнопкой мыши, что UTF-8 будет использоваться.

Я немного потерялся и не знаю, где проверить сейчас.

Резюме:

  • хранения БД отлично
  • БД выводится на JSP отлично
  • Вывод на JSP непосредственно образуют контроллер тонкой
  • даже чтение в виде форм нормально
  • . файлы свойств и текст JSP - не совсем !!!

Любые идеи? Я очень ценю и подскажу.

ответ

4

Вам необходимо настроить Eclipse для сохранения файлов в виде UTF-8.

Перейти к Окно> Предпочтения, введите текст фильтра encoding наверху, исследуйте все разделы, чтобы установить все для UTF-8. В частности, для файлов JSP это находится в Веб> Файлы JSP> Кодирование. Выберите самую верхнюю опцию UTF-8 (называемую «ISO 10646/Unicode (UTF-8)»).

Для файлов свойств это история. Согласно спецификации, они по умолчанию будут считаться ISO-8859-1. Для этого вам нужен либо инструмент native2ascii, либо укажите пользовательский файловый загрузчик, который использует UTF-8. Более подробно см. this article.

+1

Я мог бы решить часть свойств тем временем, указав кодировку в компоненте в XML. – Czar

+0

Что касается файлов JSP, я сужу его до следующего: ваш подход работает, но ТОЛЬКО при указании кодировки в том же файле. При использовании INCLUDE tage он больше не работает. Похоже, Eclipse ищет кодировку JSp ... Любые идеи, чтобы обойти это? Я использую INCLUDES довольно сильно ... – Czar

+0

Итак, Eclipse действительно ищет файл с диакритикой в ​​файле JSP и НЕ относится к нему. Как я могу обойти это? Мои включенные файлы были * .jsp, я пробовал * .inc и * .jspf, никаких изменений. – Czar

0

Для JSP см. @BalusC.

Для файлов свойств см: http://download.oracle.com/javase/1.4.2/docs/api/java/util/Properties.html

При сохранении свойств потока или загружать их из потока, используется ISO 8859-1 кодировка символов.Для символов, которые не могут быть , непосредственно представленные в этой кодировке, используются escape-последовательности Unicode; Однако в escape-последовательности допускается только один символ «u». Инструмент native2ascii может использоваться для преобразования файлов свойств в из других кодировок символов.

5

квест

У меня точно такая же проблема, чем у вас с очень аналогичной конфигурации (Tomcat, Spring, Spring Web Flow, JSF2).

Маленькие факты о моих собственных исследованиях:

  • WAR под Tomcat Окна: кодирование проблема,
  • же WAR под Tomcat Linux: нет кодирования проблемы → подозреваемого OS по умолчанию в Linux не в UTF-8,
  • та же WAR под Tomcat, которой управляет Eclipse WTP на Windows: нет проблем → WTF ?!
  • пропускающие свойства файлов в UTF-8 с использованием натуральных латинских символов вместо Юникода заполнителей: решить эту проблему для экспортированных этикеток,
  • же в (страницы JSF2) Facelets: всегда получаю эту проблему, единственное рабочее является <f:verbatim>&amp;eacute;</f:verbatim>.

все еще получаю эту проблему, после проверки все мой код для классических предпосылок и recommandations нашли на форумах:

  • <?xml version="1.0" encoding="UTF-8" ?> в верхней части файлов XML,
  • <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> внутри HTML заголовка одних и тех же файлов,
  • encoding="UTF-8" в <f:view>.

Конфигурация Tomcat следующим образом сделал ничего:

  • URIEncoding = "UTF-8" на разъеме в server.xml (нормально, потому что это касается URI кодирования не страница кодирования)
  • org.springframework.web.filter.CharacterEncodingFilter и выключаться,
  • также, что (я, вероятно пропустить момент здесь):

    <locale-encoding-mapping-list> 
        <locale-encoding-mapping> 
        <locale>fr</locale> 
        <encoding>UTF-8</encoding> 
        </locale-encoding-mapping> 
    </locale-encoding-mapping-list> 
    

Ключевой

Я нашел решение сравнения командной строки Tomcat между ВОС и классический командной строки MS-DOS Tomcat запуска. Единственным отличием является параметр -Dfile.encoding=UTF-8. Это было ключом для решения этой проблемы.

Комплект JAVA_OPTS = -Dfile.encoding = "UTF-8", и он отлично работает.

The (попытка) объяснение

Единственное объяснение, которое я нашел, Tomcat использовать кодировку JVM, которая по умолчанию система кодирования (UTF-8 на Linux, кодировка CP1252 на Windows).Eclipse WTP принудительно кодирует JVM в соответствии с настройками кодировки рабочей области. Решение JVM в UTF-8 дает решение.

Я подозреваю, что это на самом деле не правильная, и что существует проблема конфигурации либо в моем стеке или ресурсы фильтрации, сделанных либо Maven-ресурсах-плагин или мавена-война плагин, но я гавань» t нашел это еще.

4

Как сказал BalusC, вы должны сохранить файлы в формате utf-8.

Для решения вашей дополнительной проблемы включаемых файлов, просто включите заголовок

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

в верхней части каждого включенного файла. Это говорит сервлету обрабатывать файл как кодированный UTF-8, вместо использования стандартного ISO-8859-1.

2

Я использую Tomcat 7 с пружинными каркасами и используя <jsp:include page="anyFile.html"/> в JSP fail и даю мне java.lang.IllegalStateException. <jsp:include> отлично работает, если я хочу включить другой JSP-файл вместо статического файла HTML, но, когда я пытаюсь ввести статический HTML-файл, он продолжает давать мне это исключение в связи с кодировкой символов.

Использование <jsp:directive.include file="anyFile.html" /> или <%@include file="anyFile.html"%> работ, но все специальные символы («E», «е», «з» и т.д.) появляются закодировано в ISO-8891, а не UTF-8, даже если файл JSP имеют <%@page contentType="text/html" pageEncoding="UTF-8"%> и <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> в нем.

Я нашел решение, используя библиотеку тегов JSLT с импорта тег:

  1. положить это в JSP: <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

  2. Затем получить файл HTML я хочу включить с помощью этого : <c:import url="anyFile.html" charEncoding="UTF-8"/>

Has вы можете увидеть import тег фр В библиотеке JSLT есть атрибут charEncoding, который может установить html-файл в соответствующую кодировку символов и правильно отобразить его содержимое.

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