Git Bash Java 的终端编码问题

Git Bash Terminal Encoding Issue with Java

嗨,我在 Win10 和 Git 2.35.1.

$ git --version
git version 2.35.1.windows.1

我认为我的 Git Bash 终端有一些编码问题。 例如,如果我键入 java,我收到的消息全是 mojibake。

(老实说,我不确定为什么我的 Java 会用英语以外的其他语言打印。我在安装 JRE 或 JDK 时没有配置任何特殊内容。)

$ java
▒÷▒: java [-options] class [args...]
           (ִ▒▒▒▒)
   ▒▒  java [-options] -jar jarfile [args...]
           (ִ▒▒ jar ▒ļ▒)
▒▒▒▒ѡ▒▒▒▒▒:
    -d32          ʹ▒▒ 32 λ▒▒▒▒ģ▒▒ (▒▒▒▒▒▒▒)
    -d64          ʹ▒▒ 64 λ▒▒▒▒ģ▒▒ (▒▒▒▒▒▒▒)
    -client       ѡ▒▒ "client" VM
    -server       ѡ▒▒ "server" VM
                  Ĭ▒▒ VM ▒▒ client.

虽然我的语言环境是 UTF-8:

$ locale
LANG=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_ALL=C.UTF-8

并且,当使用像 echo 这样的命令时,UTF-8 字符可以正确显示:

$ echo 中文中文
中文中文

我尝试了各种方法,例如 git config --global i18n.logOutputEncoding utf-8setx LC_ALL C.UTF-8,但是 java 命令仍然打印出一团糟。

有什么问题?

java 命令是否一起使用了一些其他编码,而不是 UTF-8?

首先检查,如in here,如果有效:

java -Duser.language=en -Duser.country=US

java -Duser.language=en -Duser.country=US -XshowSettings -version

第二个命令将显示当前设置。

如果可行,您可以通过环境变量设置这些选项 JAVA_TOOL_OPTIONS
尽管从 JDK9+ 开始, 是一个有效的替代方案。

按照说明 here,我找到了永久修复:REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v JAVA_TOOL_OPTIONS /d -Duser.language=en /t REG_SZ /f 并重新启动计算机。

现在当我输入 java

$ java
Picked up JAVA_TOOL_OPTIONS: -Duser.language=en
Usage: java [options] <mainclass> [args...]
           (to execute a class)
   or  java [options] -jar <jarfile> [args...]
           (to execute a jar file)
   or  java [options] -m <module>[/<mainclass>] [args...]
...