Velocity templates seem to fail with UTF-8

steve picture steve · Mar 1, 2011 · Viewed 24.1k times · Source

I have been trying to use a velocity Template with the following content:

Sübjäct $item

Everything works fine except the translation of the two Unicode characters. The result string printed on the command line looks like:

Sübjäct foo

I searched the velocity website and the web for this issue, and came up with different font encoding options, which I added to my code. But these don't help. This is the actual code:

velocity.setProperty("file.resource.loader.path", absPath);
velocity.setProperty("input.encoding", "UTF-8");
velocity.setProperty("output.encoding", "UTF-8");

Template t = velocity.getTemplate("subject.vm");
t.setEncoding("UTF-8");

StringWriter sw = new StringWriter();

t.merge(null, sw);       
System.out.println(sw.getBuffer());

How an I fix this issue?

Answer

Jon Skeet picture Jon Skeet · Mar 1, 2011

Have you tried using this syntax?

Template template = Velocity.getTemplate("subject.vm", "UTF-8");

That looks like it should do the right thing.