2011-12-07 13 views
8

Ho file JSP:Qualcosa non va con la codifica di .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> 

come si potrebbe ottenere dalla scritto sopra il problema è nella codifica e il problema è in lingua russa. Così qui è il mio file .properties (text_ru.properties nella cartella di localizzazione):

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

Btw, è il file inglese:

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

Ma browser mi dà questa cosa:

jsp pic

Ho salvato i miei file .properties in utf-8 e l'ho provato con l'aiuto di due programmi (il primo è Eclipse e il secondo è Notepad ++) e non so davvero cosa fare con questo problema di codifica.

Sarà molto grato per il vostro aiuto.

risposta

14

Sfortunatamente, quando i file .properties vengono letti tramite ResourceBundle, è sempre ISO-8859-1.

L'approccio normale è quello di unicode-escape dei caratteri non-ascii nel file delle proprietà. Poi apparirà qualcosa di simile:

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

AnyEdit tools è un plugin di Eclipse che rende la fuga e unescaping durante lo sviluppo facile .

Un altro approccio più noioso è quello di fornire il proprio tag che utilizza il proprio ResourceBundle implementazione che a sua volta utilizza .load(reader), dove il reader sta usando UTF-8

Problemi correlati