diff --git a/spring-core/src/main/java/org/springframework/aot/nativex/FileNativeConfigurationWriter.java b/spring-core/src/main/java/org/springframework/aot/nativex/FileNativeConfigurationWriter.java index 4822734106b0..3a0e364701e0 100644 --- a/spring-core/src/main/java/org/springframework/aot/nativex/FileNativeConfigurationWriter.java +++ b/spring-core/src/main/java/org/springframework/aot/nativex/FileNativeConfigurationWriter.java @@ -20,6 +20,7 @@ import java.io.FileWriter; import java.io.IOException; import java.io.Writer; +import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.function.Consumer; @@ -59,7 +60,7 @@ public FileNativeConfigurationWriter(Path basePath, @Nullable String groupId, @N protected void writeTo(String fileName, Consumer writer) { try { File file = createIfNecessary(fileName); - try (FileWriter out = new FileWriter(file)) { + try (FileWriter out = new FileWriter(file, StandardCharsets.UTF_8)) { writer.accept(createJsonWriter(out)); } } diff --git a/spring-core/src/test/java/org/springframework/aot/nativex/FileNativeConfigurationWriterTests.java b/spring-core/src/test/java/org/springframework/aot/nativex/FileNativeConfigurationWriterTests.java index 8406cba53305..3a0ad7cecd7c 100644 --- a/spring-core/src/test/java/org/springframework/aot/nativex/FileNativeConfigurationWriterTests.java +++ b/spring-core/src/test/java/org/springframework/aot/nativex/FileNativeConfigurationWriterTests.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.function.Consumer; @@ -176,6 +177,17 @@ void resourceConfig() throws IOException, JSONException { }"""); } + @Test + void resourceConfigWithNonAsciiPatternIsWrittenAsUtf8() throws IOException { + FileNativeConfigurationWriter generator = new FileNativeConfigurationWriter(tempDir); + RuntimeHints hints = new RuntimeHints(); + hints.resources().registerPattern("com/example/café/**"); + generator.write(hints); + Path jsonFile = tempDir.resolve("META-INF").resolve("native-image").resolve("reachability-metadata.json"); + byte[] content = Files.readAllBytes(jsonFile); + assertThat(content).containsSequence("café".getBytes(StandardCharsets.UTF_8)); + } + @Test void namespace() { String groupId = "foo.bar";