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-8
和 setx 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...]
...
嗨,我在 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-8
和 setx 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...]
...