<i18n dev> RFR: 8274784: jshell: Garbled character was displayed by System.out.println(...) on Japanese Windows

Naoto Sato naoto at openjdk.java.net
Mon Nov 22 19:51:09 UTC 2021


On Mon, 22 Nov 2021 16:08:58 GMT, Ichiroh Takiguchi <itakiguchi at 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


More information about the i18n-dev mailing list