Sunday, 21 May 2017

java - Character Encoding not working for Japanese ,Chinese and Korean

I have Unicode characters for all the European countries and for a few Asian countries like Japan, China, Korean. All the Unicodes are working fine for European countries except for Japan, China, Korean.



Example for Japan:



dear_name=\u30c7\u30a3\u30fc\u30e9\u30fc


Example for China:




dear_name=\u4eb2\u7231\u7684


Example for Korean:



dear_name=\uce5c\uc560\ud558\ub294


Example for Sweden (this one is working fine):




dear_name=Till


Default character encoding is UTF-8.



Template template = VelocityFactory.getTemplate("test.vm", "UTF-8");
String messageText = VelocityFactory.merge(context, template, charset);


While debuging the merge method I found out that the merged result is getting grabled here itself for chinese,Japanese,korean.




public static String merge(VelocityContext context, Template template, String charset) throws Exception {

String newResult = null;

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
OutputStreamWriter streamWriter;
if(charset != null && charset.length() > 0) {
streamWriter = new OutputStreamWriter(outputStream, charset);
} else {

streamWriter = new OutputStreamWriter(outputStream);
}

template.merge(context, streamWriter);
streamWriter.close();

mergedResult = outputStream.toString();
outputStream.close();

return newResult;

}
}


Below is the mail template and only for header it is displaying in correct format for Japanese, Chinese, and Korean, but not for the body:

























$velocityUtils.getMessage("test")



$velocityUtils.getMessage("test1")








Any information how to fix this? How do i encode correctly??

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...