2011-12-07 34 views
8

Tôi có tập tin jsp:Cái gì sai với mã hóa của .properties hoặc 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> 

Như bạn có thể nhận được từ viết ở trên vấn đề là trong mã hóa và vấn đề là trong ngôn ngữ Nga. Vì vậy, đây là .properties tập tin của tôi (text_ru.properties trong thư mục địa hóa):

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

Btw, đó là tập tin tiếng Anh:

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

Nhưng trình duyệt mang lại cho tôi điều này:

jsp pic

Tôi đã lưu các tệp .properties của mình trong utf-8 và thử nó với sự trợ giúp của hai chương trình (đầu tiên là Eclipse và thứ hai là Notepad ++) và tôi thực sự không biết phải làm gì làm với vấn đề mã hóa này.

Sẽ rất biết ơn sự giúp đỡ của bạn.

Trả lời

14

Thật không may, khi .properties tệp được đọc qua ResourceBundle, thiết bị luôn mong muốn ISO-8859-1.

Cách tiếp cận thông thường là unicode-escape các ký tự không phải ascii trong tệp thuộc tính. Sau đó, nó sẽ giống như thế:

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

AnyEdit tools là một thực plugin mà làm cho thoát và tự thoát trong phát triển dễ dàng .

khác, cách tiếp cận tẻ nhạt hơn là cung cấp thẻ của riêng bạn mà sử dụng ResourceBundle thực hiện của riêng bạn mà lần lượt sử dụng .load(reader), nơi reader đang sử dụng UTF-8

Các vấn đề liên quan