On Tue, 16 Nov 2021 21:49:55 GMT, Naoto Sato <na...@openjdk.org> wrote:
> BTW, I still observe on Windows (system locale=ja-JP): > > ``` > D:\projects\jdk\git\jdk>.\build\windows-x64\jdk\bin\jshell > -J-Duser.language=ja > | JShellへようこそ -- バージョン18-internal > | 概要については、次を入力してください: /help intro > > jshell> System.out.println("\u3042") > 縺・ > ``` > > This needs to be separately addressed in > https://bugs.openjdk.java.net/browse/JDK-8274784 The following diff seems to fix the garbled char issue above: $ git diff diff --git a/src/jdk.jshell/share/classes/jdk/jshell/execution/RemoteExecutionControl.java b/src/jdk.jshell/share/classes/jdk/jshell/execution/RemoteExecutionControl.java index 810e80acf47..be0b9dcb0c3 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/execution/RemoteExecutionControl.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/execution/RemoteExecutionControl.java @@ -30,6 +30,7 @@ import java.io.PrintStream; import java.lang.reflect.Method; import java.net.Socket; +import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; @@ -63,8 +64,8 @@ public class RemoteExecutionControl extends DirectExecutionControl implements Ex InputStream inStream = socket.getInputStream(); OutputStream outStream = socket.getOutputStream(); Map<String, Consumer<OutputStream>> outputs = new HashMap<>(); - outputs.put("out", st -> System.setOut(new PrintStream(st, true))); - outputs.put("err", st -> System.setErr(new PrintStream(st, true))); + outputs.put("out", st -> System.setOut(new PrintStream(st, true, Charset.forName(System.getProperty("native.encoding"))))); + outputs.put("err", st -> System.setErr(new PrintStream(st, true, Charset.forName(System.getProperty("native.encoding"))))); Map<String, Consumer<InputStream>> input = new HashMap<>(); input.put("in", System::setIn); forwardExecutionControlAndIO(new RemoteExecutionControl(), inStream, outStream, outputs, input); ------------- PR: https://git.openjdk.java.net/jdk/pull/6401