i18n: Умлаут неправильно отображается в JSP - PullRequest
4 голосов
/ 29 сентября 2010

У меня есть JSP, который должен отображать некоторый немецкий текст из некоторых файлов .properties с помощью fmt: message, например

Соответствующая запись в файле .properties:.test.hware.test = Аппаратное обеспечение (умножение между r и f во втором слове).

В Internet Explorer это отображается как:

Hardware prà prfen

Umlaut поврежден.Любые идеи относительно того, что здесь происходит?Обратите внимание, что мы используем Spring MVC.

Ответы [ 3 ]

6 голосов
/ 29 сентября 2010

ü типично для UTF-8, созданного ü, который неправильно кодируется как ISO-8859-1 вместо UTF-8.Вот программное свидетельство:

System.out.println(new String("ü".getBytes("UTF-8"), "ISO-8859-1")); // ü

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

Эта инструкция происходит в заголовке HTTP Content-Type.Используя любой инструмент отладки заголовков HTTP, вы должны уметь вычислять возвращаемый заголовок.Одним из популярных инструментов является Firebug .

alt text

Обратите внимание на наличие charset=utf-8.

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

<%@ page pageEncoding="UTF-8" %>

См. также:

6 голосов
/ 09 июня 2011

Если вы определили свой Spring messageSource через org.springframework.context.support.ResourceBundleMessageSource, свойства загружаются с кодировкой iso-8859-1, даже если файл свойств кодирован utf-8 (Java загружает свойства по умолчанию с кодировкой iso-8859-1).

Рассмотрите возможность использования org.springframework.context.support.ReloadableResourceBundleMessageSource.Вы можете настроить кодировку по умолчанию с этой реализацией MessageSource.См. Javadoc для получения дополнительной информации / особенностей этого класса.

Пример:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:message"/>
    <property name="defaultEncoding" value="UTF-8" />
</bean>
0 голосов
/ 29 сентября 2010

Вероятно, проблема с кодировкой. Это может быть в кодировке, которую вы обслуживаете, в этом случае вы должны

  1. Попробуйте конвертировать & uuml; вместо. Это не исправит другие символы, но вы можете преобразовать все кодовые точки, отличные от ASCII, в {форму, где 1234 - десятичное значение символа и / или
  2. Назначить кодировку страницы, как описывает Фред Бассет. Вы должны использовать UTF-8, если у вас нет особых причин не делать этого.

Или это может быть проблема с кодировкой, используемой для чтения файла свойств. Если вы используете FileReader, не надо. Вместо этого используйте new InputStreamReader(new FileInputStream(...), encoding), где encoding - кодировка файла свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...