Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Display Hindi language in console using Java

Tags:

java

utf-8

StringBuffer contents=new StringBuffer();
BufferedReader input =  new BufferedReader(new FileReader("/home/xyz/abc.txt"));
String line = null; //not declared within while loop
while (( line = input.readLine()) != null){
    contents.append(line);
}
System.out.println(contents.toString());

File abc.txt contains

\u0905\u092d\u0940 \u0938\u092e\u092f \u0939\u0948 \u091c\u0928\u0924\u093e \u091c\u094b \u091a\u093e\u0939\u0924\u0940 \u0939\u0948 \u092

I want to dispaly in Hindi language in console using Java.

if i simply print like this String str="\u0905\u092d\u0940 \u0938\u092e\u092f \u0939\u0948 \u091c\u0928\u0924\u093e \u091c\u094b \u091a\u093e\u0939\u0924\u0940 \u0939\u0948 \u092";

System.out.println(str);

then it works fine but when i try to read from a file it doesn't work.

help me out.

like image 511
Sanjay Dutt Avatar asked Jun 08 '12 13:06

Sanjay Dutt


2 Answers

Use Apache Commons Lang.

import org.apache.commons.lang3.StringEscapeUtils;

// open the file as ASCII, read it into a string, then
String escapedStr; // = "\u0905\u092d\u0940 \u0938\u092e\u092f \u0939\u0948 ..."
// (to include such a string in a Java program you would have to double each \)

String hindiStr = StringEscapeUtils.unescapeJava( escapedStr );

System.out.println(hindiStr);

(Make sure your console is set up to display Hindi (correct fonts, etc) and the console's encoding matches your Java encoding. The Java code above is just the bare bones.)

like image 85
theglauber Avatar answered Nov 04 '22 20:11

theglauber


You should store the contents in the file as UTF-8 encoded Hindi characters. For instance, in your case it would be अभी समय है जनता जो चाहती है. That is, instead of saving unicode escapes, directly save the raw Hindi characters. You can then simply read like normal.

You just have to make sure that the editor you use saves it using UTF-8 encoding. See Spanish language chars are not displayed properly?

Otherwise, you'll have to make the file a .properties file and read using java.util.Properties as it offers unicode unescaping support inherently.

Also read Reading unicode character in java

like image 5
adarshr Avatar answered Nov 04 '22 19:11

adarshr