Question

I am using JSTL fmt taglib to show Tamil characters. But I could not show any Tamil characters. Instead of showing Tamil characters, it's showing question mark characters as in ??????. I tried for Hindi and it shows question marks as well. What should I do now?

Here is my code. I simply try to print Hello World in Tamil.

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> 
Was it helpful?

Solution

Properties files do not support UTF-8. Read the javadoc:

... the input/output stream is encoded in ISO 8859-1 character encoding ...

(as you seem to be using Eclipse, I wonder if you have ever actually carefully read the warning message which it would show while saving such a .properties file for the first time)

Basically, you need the native2ascii tool to convert UTF-8 saved properties files to proper ISO-8859-1 properties file format. Rename your UTF-8 properties file to include utf8 somewhere in the filename and convert it as follows:

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

Hereby any character which is not covered by the ISO-8859-1 charset will be replaced by an unicode codepoint sequence like \u1234.

However, Eclipse has already builtin support for it. You should make use of it. You should be opening properties files in a "Properties file editor" instead of a "Text editor" (it's recognizable by the property values being highlighted in blue instead of unhighlighted in black). If it doesn't do that by default already, rightclick the properties file and choose Open With > Properties File Editor. If you paste வணக்கம் உலகம், then Eclipse will (should) automatically convert it to \u0BB5\u0BA3\u0B95\u0BCD\u0B95\u0BAE\u0BCD \u0B89\u0BB2\u0B95\u0BAE\u0BCD\u008D.

Save it once again, clean/rebuild/redeploy/restart and try once again. It should now work fine.

See also:


Unrelated to the concrete problem, your @page is full of values which are already the default. Just the following is sufficient.

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

OTHER TIPS

Put this line in you jsp:

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

Change file encoding in your message.properties -> properties -> Resource -> text file encoding -> UTF8

And review in your mvc-dispatcher-servlet.xml this messageSource bean:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:project" />
        <property name="defaultEncoding" value="UTF-8"/>
</bean>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top