On Fri, 8 Oct 2021 21:07:32 GMT, Naoto Sato <na...@openjdk.org> wrote:
>> Ichiroh Takiguchi has updated the pull request incrementally with one >> additional commit since the last revision: >> >> 8274544: Langtools command's usage were garbled on Japanese Windows > > BTW, does the PoC in the jshell bug report really causing the issue? > > System.out.println("\u3042") > > This is ASCII, so save/restore does not seem to cause any issues across JDKs > with and without JEP400. Did you mean `Systemout.println("あ")` instead? Hello @naotoj . Sorry I'm late. I'd like to show you jshell issue step by step. 1. `System.out.println(...)` did not work if non-ASCII character was printed on JDK18-b13. Because jshell output encoding was MS932, jshell agent output encoding was UTF-8  2. Above fix was applied against `JShellToolProvider.java` only. The issue was not fixed.  3. Just applied lahodaj's fix `JShellToolBuilder.java`. It worked fine as expected  4. I checked compatibility between JDK17 and this fix by using `/save` and `/open` It seemed saved a.jsh's encoding was MS932  5. I think jshell and agent should use same `file.encoding` system property. I applied following fix. --- a/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiInitiator.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiInitiator.java @@ -27,6 +27,7 @@ package jdk.jshell.execution; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.nio.charset.Charset; import java.nio.file.Files; import java.util.ArrayList; import java.util.HashMap; @@ -86,6 +87,17 @@ public class JdiInitiator { Map<String, String> customConnectorArgs) { this.remoteAgent = remoteAgent; this.connectTimeout = (int) (timeout * CONNECT_TIMEOUT_FACTOR); + if (!StandardCharsets.UTF_8.equals(Charset.defaultCharset())) { + boolean encodingFlag = true; + for (String s : remoteVMOptions.toArray(new String[0])) { + if (s.startsWith("-Dfile.encoding=")) + encodingFlag = false; + } + if (encodingFlag) { + remoteVMOptions.add("-Dfile.encoding=" + +Charset.defaultCharset().name()); + } + } String connectorName = isLaunch ? "com.sun.jdi.CommandLineLaunch"  I think `JShellToolBuilder.java` and `JdiInitiator.java`. Could you give me some suggestions ? ------------- PR: https://git.openjdk.java.net/jdk/pull/5771