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

Reply via email to