如何将JSF消息编码设置为UTF-8?

我有一些用户输入validation的代码

        

它工作正常,但如果用户输入无效,我需要显示一些UTF-8消息,
我怎样才能做到这一点?

我假设您当前的问题是ISO-8859-1范围之外的字符显示为mojibake 。 这是真的? 我想不出提出这个微不足道的问题的另一个原因。 是? 然后预读:

首先,如果您仍在使用旧JSP而不是其后继Facelets,那么您需要将页面编码设置为UTF-8。 把它放在每个JSP的顶部:

 <%@page pageEncoding="UTF-8" %> 

或者在web.xml全局配置它:

   *.jsp UTF-8   

如果您正在使用Facelets,则无需执行任何操作。 它默认使用UTF-8作为响应编码。

其次,如果您从.properties文件中获取消息,则需要了解默认情况下这些文件是使用ISO-8859-1读取的。 另请参见java.util.Properties javadoc :

..输入/输出流以ISO 8859-1字符编码进行编码。 无法在此编码中直接表示的字符可以使用Unicode转义编写; 在转义序列中只允许一个’u’字符。 native2ascii工具可用于将属性文件转换为其他字符编码或从其他字符编码转换。

因此,您需要通过Unicode转义序列记下ISO-8859-1范围之外的字符 。 例如,而不是

 some.dutch.text = Één van de wijken van Curaçao heet Saliña. 

你需要写

 some.dutch.text = \u00c9\u00e9n van de wijken van Cura\u00e7ao heet Sali\u00f1a. 

这可以通过使用native2ascii工具自动完成。

作为一个完全不同的替代方案,您可以为JSF提供自定义ResourceBundle实现,其自定义Control使用UTF-8读取文件。 在本答案和本博客中对此进行了更详细的介绍。 这仅适用于您自己提供validation消息的情况,例如requiredMessage而不是覆盖JSF默认validation消息。 除此之外(即你需要文件),那么你真的需要使用native2ascii工具。

也可以看看:

  • Unicode – 如何使角色正确?