On Mon, 22 Nov 2021 16:08:58 GMT, Ichiroh Takiguchi <itakigu...@openjdk.org> wrote:
> JEP-400 was implemented by JDK18-b13. > After JDK18-b13, garbled character was displayed by following code on > Japanese Windows' command prompt. > > System.out.println("\u3042") > > Japanese "A" should be display ed, but garbled character was displayed. > Also saved jshell command list did not work as expected if Japanese character > was there. > > Following issue has some information > 8274544: Langtools command's usage were garbled on Japanese Windows #5771 > https://github.com/openjdk/jdk/pull/5771 > This issue also happens on Linux ja_JP.eucjp locale. > RemoteExecutionControl.java change is required for this issue. > > Also we cannot input Japanese character on Linux ja_JP.eucjp locale terminal. > AbstractTerminal.java change is required for this issue. src/jdk.internal.le/share/classes/jdk/internal/org/jline/terminal/impl/AbstractTerminal.java line 60: > 58: this.type = type != null ? type : "ansi"; > 59: this.encoding = encoding != null ? encoding : > 60: Charset.forName(new > OutputStreamWriter(System.out).getEncoding(), Charset.defaultCharset()); I don't think `OutputStreamWriter` instance is needed here. System.out instanceof PrintStream ps ? ps.charset() : Charset.defaultEncoding(); would suffice. src/jdk.jshell/share/classes/jdk/jshell/execution/RemoteExecutionControl.java line 80: > 78: Charset.defaultCharset()); > 79: } > 80: I'd prefer not to introduce this static method, but just embed it into each location. The other comment in `AbstractTerminal.java` applies here too. ------------- PR: https://git.openjdk.java.net/jdk/pull/6505