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

标签 jsp character-encoding jstl properties-file tamil

我正在使用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已经内置了对此的支持。您应该利用它。您应该在“属性文件编辑器”而不是“文本编辑器”中打开属性文件(可以通过以蓝色突出显示而不是黑色突出显示的属性值来识别它)。如果默认情况下尚未执行此操作,请右键单击属性文件,然后选择“打开方式”>“属性文件编辑器”。如果粘贴வணக்கம் உலகம்,那么Eclipse将(应该)自动将其转换为\u0BB5\u0BA3\u0B95\u0BCD\u0B95\u0BAE\u0BCD \u0B89\u0BB2\u0B95\u0BAE\u0BCD\u008D
再次保存,清理/重建/重新部署/重新启动,然后再试一次。现在应该可以正常工作了。
也可以看看:

Unicode - How to get the characters right?


与具体问题无关,您的@page充满了已经是默认值的值。仅以下内容就足够了。
<%@page pageEncoding="UTF-8"%>

关于jsp - 使用JSTL fmt库和属性文件时,泰米尔字符显示为问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14118431/

相关文章:

java - 基于 SAS 的软件中的分页

c++ - 使用中文字符时文件名错误

Java-如何验证泰语字符是否正确编码从 UTF-8 到 TIS620

java - 如何从网站 GET 请求中获取包含正确文本的字符串,避免特殊的 HTML 代码?

javascript - 如何从 <select> 检索值并将其放入隐藏的 JSTL 中

java - 使用 java 的 MVC - 返回 NULL

jsp - Sublime Text 缩进问题

java - 使用jsp页面删除数据库中的数据

javascript - Javascript 中的 onkeypress + onblur

java - 使用servlet提交表单时不检索图像