This is an automated email from the ASF dual-hosted git repository.
sgoeschl pushed a commit to branch FREEMARKER-161
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
The following commit(s) were added to refs/heads/FREEMARKER-161 by this push:
new 3330d45 FREEMARKER-161 [freemarker-generator] Fix broken output
encoding
3330d45 is described below
commit 3330d456dc7d2d00ec37c5616e004d6526e70bb2
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Thu Jan 7 19:57:27 2021 +0100
FREEMARKER-161 [freemarker-generator] Fix broken output encoding
---
.../generator/base/template/TemplateOutput.java | 15 ++++++++++++---
.../base/template/TemplateTransformationsBuilder.java | 2 +-
.../freemarker/generator/cli/task/FreeMarkerTask.java | 6 ++++--
.../src/test/data/encoding/utf16.txt | Bin 174 -> 362 bytes
.../src/test/data/encoding/utf8.txt | 2 ++
5 files changed, 19 insertions(+), 6 deletions(-)
diff --git
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateOutput.java
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateOutput.java
index a73a849..89a8bb5 100644
---
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateOutput.java
+++
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateOutput.java
@@ -18,6 +18,7 @@ package org.apache.freemarker.generator.base.template;
import java.io.File;
import java.io.Writer;
+import java.nio.charset.Charset;
import static java.util.Objects.requireNonNull;
@@ -32,23 +33,26 @@ public class TemplateOutput {
private final Writer writer;
private final File file;
+ private final Charset charset;
- private TemplateOutput(File file) {
+ private TemplateOutput(File file, final Charset charset) {
this.writer = null;
this.file = requireNonNull(file);
+ this.charset = requireNonNull(charset);
}
private TemplateOutput(Writer writer) {
this.writer = requireNonNull(writer);
this.file = null;
+ this.charset = null;
}
public static TemplateOutput fromWriter(Writer writer) {
return new TemplateOutput(writer);
}
- public static TemplateOutput fromFile(File file) {
- return new TemplateOutput(file);
+ public static TemplateOutput fromFile(File file, final Charset charset) {
+ return new TemplateOutput(file, charset);
}
public Writer getWriter() {
@@ -63,11 +67,16 @@ public class TemplateOutput {
return file;
}
+ public Charset getCharset() {
+ return charset;
+ }
+
@Override
public String toString() {
return "TemplateOutput{" +
"writer=" + writer +
", file=" + file +
+ ", charset=" + charset +
'}';
}
}
diff --git
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
index aee4438..0db84bd 100644
---
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
+++
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
@@ -231,7 +231,7 @@ public class TemplateTransformationsBuilder {
if (callerSuppliedWriter != null) {
return TemplateOutput.fromWriter(callerSuppliedWriter);
} else if (templateOutputFile != null) {
- return TemplateOutput.fromFile(templateOutputFile);
+ return TemplateOutput.fromFile(templateOutputFile, outputEncoding);
} else {
return TemplateOutput.fromWriter(new BufferedWriter(new
OutputStreamWriter(System.out, outputEncoding)));
}
diff --git
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java
index 6858f55..f5f0046 100644
---
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java
+++
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/task/FreeMarkerTask.java
@@ -28,8 +28,9 @@ import
org.apache.freemarker.generator.base.template.TemplateSource;
import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileWriter;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Arrays;
import java.util.Collection;
@@ -125,7 +126,8 @@ public class FreeMarkerTask implements Callable<Integer> {
} else {
final File file = templateOutput.getFile();
FileUtils.forceMkdirParent(file);
- return new BufferedWriter(new FileWriter(file));
+ // We need to explicitly set our output encoding here - see
https://freemarker.apache.org/docs/pgui_misc_charset.html
+ return new BufferedWriter(new OutputStreamWriter(new
FileOutputStream(file), templateOutput.getCharset()));
}
}
diff --git a/freemarker-generator-cli/src/test/data/encoding/utf16.txt
b/freemarker-generator-cli/src/test/data/encoding/utf16.txt
index 4d8e1f2..6dfd2e5 100755
Binary files a/freemarker-generator-cli/src/test/data/encoding/utf16.txt and
b/freemarker-generator-cli/src/test/data/encoding/utf16.txt differ
diff --git a/freemarker-generator-cli/src/test/data/encoding/utf8.txt
b/freemarker-generator-cli/src/test/data/encoding/utf8.txt
index c43eb00..25f1e5c 100755
--- a/freemarker-generator-cli/src/test/data/encoding/utf8.txt
+++ b/freemarker-generator-cli/src/test/data/encoding/utf8.txt
@@ -1,3 +1,5 @@
+UTF-8 encoding
+=============================================================================
première is first
première is slightly different
Кириллица is Cyrillic