在使用JSTL fmt库和属性文件时,泰米尔字符显示为问号



我使用JSTL fmt taglib来显示泰米尔字符。但我不能显示任何泰米尔字符。它显示的不是泰米尔字符,而是像??????一样显示问号字符。我试着用印地语,它也有问号。我现在该怎么办?

这是我的代码。我只是试着用泰米尔语打印Hello World。

fileproperty.properties:

helloworld=வணக்கம் உலகம்

Hello.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org  /TR/html4/loose.dtd">
<html>
  <fmt:setLocale value="ta-IN"/>
  <fmt:setBundle basename="fileproperty"/>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Home</title>
  </head>
  <body>
    <fmt:message key="helloworld"/>
  </body>
</html> 

属性文件不支持UTF-8。阅读javadoc:

…输入/输出流采用ISO 8859-1字符编码…

(因为您似乎正在使用Eclipse,我想知道您是否曾经真正仔细阅读过它在第一次保存这样的.properties文件时显示的警告消息)

基本上,您需要native2ascii工具将保存的UTF-8属性文件转换为适当的ISO-8859-1属性文件格式。重命名UTF-8属性文件,使其在文件名中包含utf8,并将其转换为如下方式:

native2ascii –encoding UTF-8 fileproperty.utf8.properties fileproperty.properties

因此,任何未被ISO-8859-1字符集覆盖的字符将被替换为unicode码点序列,如u1234

但是,Eclipse已经内置了对它的支持。你应该好好利用它。您应该在"属性文件编辑器"中打开属性文件。而不是"文本编辑器"。(属性值以蓝色高亮显示,而不是以黑色不高亮显示,从而可以识别它)。如果默认情况下没有这样做,右键单击属性文件并选择Open With>属性文件编辑器。如果您粘贴வணக்கம் உலகம்,那么Eclipse将(应该)自动将其转换为u0BB5u0BA3u0B95u0BCDu0B95u0BAEu0BCD u0B89u0BB2u0B95u0BAEu0BCDu008D

再次保存,清理/重建/重新部署/重新启动,然后再试一次。现在应该可以正常工作了。

参见:

  • Unicode -如何得到正确的字符?

与具体问题无关的,您的@page充满了已经默认的值。以下内容就足够了。

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

把这行放到你的jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

更改消息中的文件编码。属性-> 属性 -> 资源 -> 文本文件编码 -> use UTF8

在mvc-dispatcher-servlet.xml中查看这个messageSource bean:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:project" />
        <property name="defaultEncoding" value="UTF-8"/>
</bean>

最新更新