steve steve - 3 months ago 24
Java Question

Velocity templates seem to fail with UTF-8

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

Have you tried using:

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

? That looks like it should do the right thing.