不是西班牙语字符(ú,í),而是在UI上得到(ó,Ã)

时间:2013-12-12 12:18:18

标签: java spring utf-8 character-encoding properties-file

我在三个属性文件中声明了三个语言环境转换,如Strings.properties,Strings_es_ES.properties和Strings_en_GB.properties(适用于美国,ES和英国)

在Strings_es_ES.properties中,我声明了如下所示的字符串,并使用UTF-8格式设置属性文件。

admin.main.numberofrewards=Número de recompensas:
admin.main.categorylist=lista Categoría

我在.jsp文件中使用上面的资源包,如下所示

<%@ page pageEncoding="UTF-8"%>
<h2><spring:message code="admin.main.numberofrewards"/></h2>
<p><spring:message code="admin.main.categorylist"/></p>

我在浏览器上输出如下

Nómero de recompensas
lista CategorÃa

请帮我解决这个问题

2 个答案:

答案 0 :(得分:9)

  

并使用UTF-8格式设置属性文件

你的错误。

它们read为ISO-8859-1,因此它们应保存为ISO-8859-1。如果您打算提供ISO-8859-1 character set无法提供的字符,那么您基本上有3个选项:

  1. 使用native2ascii工具将UTF-8保存的属性文件转换为ISO-8859-1编码的属性文件,其中包含\uXXXX形式的unicode转义,而不是那些“特殊字符“ISO-8859-1字符集未涵盖。

  2. 使用能够自动执行#1的属性文件编辑器,例如Eclipse中内置的编辑器。换句话说,只需在Eclipse中创建和编辑属性文件即可。它会自动担心编码问题。

  3. 使用自定义ResourceBundle.Control实现,您可以使用new InputStreamReader(inputStream, "UTF-8")自行显式读取属性文件。但是,作为非Spring用户,我不知道如何告诉Spring使用该自定义ControlIn JSF it's easy

  4. 另见:

答案 1 :(得分:1)

如果你的属性文件看起来像这个Descripción de artículos,但是你在前端Descripción de artículos得到了这个,那么问题是用于读取属性文件的编码,这是你怎么知道的Spring始终使用UTF-8:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;

@Configuration
public class MessageConfiguration {

    @Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setDefaultEncoding("UTF-8");
        // other config options go here if needed, e.g. path to the property bundle
        return messageSource;
    }
}