Что-то не так с кодировкой .properties или JSP - PullRequest
9 голосов
/ 08 декабря 2011

У меня есть файл jsp:

   <%@ page language="java" contentType="text/html;
charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<c:set var="language"
    value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}"
    scope="session" />
<fmt:setLocale value="${language}" />
<fmt:setBundle basename="localization.text" />
<!DOCTYPE html>
<html lang="${language}">
<head>
<title>JSP/JSTL i18n demo</title>
</head>
<body>
<form accept-charset="UTF-8"><select id="language"
    name="language" onchange="submit()">
    <option value="en" ${language=='en' ? 'selected' : ''}>English</option>
    <option value="ru" ${language=='ru' ? 'selected' : ''}>Russian</option>
</select></form>
<form name="loginForm" method="POST" action="controller"><input
    type="hidden" name="command" value="login" /> <label for="login"><fmt:message
    key="login.label.login" />:</label> <input type="text" name="login" value="">
<br>
<input type="hidden" name="command" value="password" /> <label
    for="password"><fmt:message key="login.label.password" />:</label> <input
    type="password" name="password" value=""> <br>
<fmt:message key="login.button.submit" var="buttonValue" /> <input
    type="submit" name="submit" value="${buttonValue}"></form>
</body>
</html>

Как вы могли понять из написанного выше, проблема в кодировке, а проблема в русском языке.Итак, вот мой файл .properties (text_ru.properties в папке локализации):

login.label.login = Логин
login.label.password = Пароль
login.button.submit = Отправить

Кстати, это английский файл:

login.label.login = Login
login.label.password = Password
login.button.submit = Sign in

Но браузер дает мне такую ​​вещь:

jsp pic

Я сохранил свои .properties файлы в utf-8 и попробовал его с помощью двух программ (первая - Eclipse, а вторая - Notepad ++), и я действительно не знаю, чтосделать с этой проблемой кодирования.

Буду очень признателен за вашу помощь.

1 Ответ

15 голосов
/ 08 декабря 2011

К сожалению, когда .properties файлы читаются через ResourceBundle, он всегда ожидает ISO-8859-1.

Обычный подход заключается в экранировании символов в кодировке unicode в файле свойств. Тогда это будет выглядеть примерно так:

hours.label = \ u0427 \ u0430 \ u0441 \ u043e \ u0432 \ u0435

Инструменты AnyEdit - это плагин Eclipse, который облегчает выход и выход во время разработки.

Другой, более утомительный подход заключается в предоставлении собственного тега, который использует собственную реализацию ResourceBundle, которая в свою очередь использует .load(reader), где reader использует UTF-8

...