2011-12-07 14 views
8

Tengo archivo JSP:Algo mal con codificación de .properties o 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> 

Como usted podría conseguir de escrito arriba el problema es en la codificación y el problema está en idioma ruso. Así que aquí está mi archivo .properties (text_ru.properties en la carpeta de localización):

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

Por cierto, es archivo de Inglés:

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

Pero navegador me da esta cosa:

jsp pic

Guardé mis archivos .properties en utf-8 y lo intenté con la ayuda de dos programas (el primero es Eclipse y el segundo es Notepad ++) y realmente no sé qué hacer con este problema de codificación.

Estaremos muy agradecidos por su ayuda.

Respuesta

14

Desafortunadamente, cuando los archivos .properties se leen a través de un ResourceBundle, siempre se espera ISO-8859-1.

El enfoque habitual es escapar unicode de los caracteres no ascii en el archivo de propiedades. Entonces se verá algo así:

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

AnyEdit tools es un plugin de eclipse que hace que el escape y unescape durante el desarrollo fácil .

Otro enfoque más tedioso es proporcionar su propia etiqueta que utiliza su propio ResourceBundle aplicación que a su vez utiliza .load(reader), donde el reader está utilizando UTF-8

Cuestiones relacionadas