diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java
index 31eef95eaa..441cfe5c50 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java
@@ -84,6 +84,7 @@ abstract class AbstractGenerator implements Generator {
boolean generateTableValuedFunctions = false;
protected GeneratorStrategyWrapper strategy;
+ protected String targetEncoding = "UTF-8";
final Language language;
AbstractGenerator(Language language) {
@@ -448,6 +449,16 @@ abstract class AbstractGenerator implements Generator {
return strategy.getTargetPackage();
}
+ @Override
+ public String getTargetEncoding() {
+ return targetEncoding;
+ }
+
+ @Override
+ public void setTargetEncoding(String encoding) {
+ this.targetEncoding = encoding;
+ }
+
/**
* If file is a directory, recursively empty its children.
* If file is a file, delete it.
diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java
index 3cbd451ebf..1441ea99ed 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java
@@ -409,9 +409,12 @@ public class GenerationTool {
g.getTarget().setPackageName("org.jooq.generated");
if (StringUtils.isBlank(g.getTarget().getDirectory()))
g.getTarget().setDirectory("target/generated-sources/jooq");
+ if (StringUtils.isBlank(g.getTarget().getEncoding()))
+ g.getTarget().setEncoding("UTF-8");
generator.setTargetPackage(g.getTarget().getPackageName());
generator.setTargetDirectory(g.getTarget().getDirectory());
+ generator.setTargetEncoding(g.getTarget().getEncoding());
// [#1394] The element should be optional
if (g.getGenerate() == null)
diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java
index dfb6c9144e..486e53c172 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java
@@ -389,6 +389,16 @@ public interface Generator {
*/
void setTargetDirectory(String directory);
+ /**
+ * The target encoding
+ */
+ String getTargetEncoding();
+
+ /**
+ * Initialise the target encoding
+ */
+ void setTargetEncoding(String encoding);
+
/**
* @return Get the target package for the current configuration
*/
diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorWriter.java b/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorWriter.java
index 605d957249..53140a5890 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorWriter.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorWriter.java
@@ -80,15 +80,21 @@ public abstract class GeneratorWriter> {
private final File file;
+ private final String encoding;
private final StringBuilder sb;
private int indentTabs;
private String tabString = " ";
private boolean newline = true;
protected GeneratorWriter(File file) {
+ this(file, null);
+ }
+
+ protected GeneratorWriter(File file, String encoding) {
file.getParentFile().mkdirs();
this.file = file;
+ this.encoding = encoding;
this.sb = new StringBuilder();
}
@@ -259,7 +265,7 @@ public abstract class GeneratorWriter> {
old = new RandomAccessFile(file, "r");
byte[] oldBytes = new byte[(int) old.length()];
old.readFully(oldBytes);
- oldContent = new String(oldBytes, "UTF-8");
+ oldContent = new String(oldBytes, encoding());
}
finally {
if (old != null)
@@ -268,7 +274,7 @@ public abstract class GeneratorWriter> {
}
if (oldContent == null || !oldContent.equals(newContent)) {
- PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
+ PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), encoding()));
writer.append(newContent);
writer.flush();
@@ -283,6 +289,10 @@ public abstract class GeneratorWriter> {
}
}
+ protected String encoding() {
+ return encoding != null ? encoding : "UTF-8";
+ }
+
protected String beforeClose(String string) {
return string;
}
diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java
index 46d5729a54..900e89c9d9 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java
@@ -5127,7 +5127,7 @@ public class JavaGenerator extends AbstractGenerator {
if (scala)
file = new File(file.getParentFile(), file.getName().replace(".java", ".scala"));
- return new JavaWriter(file, generateFullyQualifiedTypes());
+ return new JavaWriter(file, generateFullyQualifiedTypes(), targetEncoding);
}
// [#4626] Users may need to call this method
diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaWriter.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaWriter.java
index 41bbf6e65d..217daed401 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaWriter.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaWriter.java
@@ -37,7 +37,11 @@ public class JavaWriter extends GeneratorWriter {
private final Pattern PLAIN_GENERIC_TYPE_PATTERN = Pattern.compile("[<\\[]((?:[\\p{L}_$][\\p{L}\\p{N}_$]*\\.)*[\\p{L}_$][\\p{L}\\p{N}_$]*)[>\\]]");
public JavaWriter(File file, String fullyQualifiedTypes) {
- super(file);
+ this(file, fullyQualifiedTypes, null);
+ }
+
+ public JavaWriter(File file, String fullyQualifiedTypes, String encoding) {
+ super(file, encoding);
this.className = file.getName().replaceAll("\\.(java|scala)$", "");
this.isJava = file.getName().endsWith(".java");
diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.8.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.8.0.xsd
index db32070c45..425dd700e4 100644
--- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.8.0.xsd
+++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.8.0.xsd
@@ -855,6 +855,9 @@
+
+
+