Git Bash 终端在使用 Java 时出现编码问题

3

你好,我目前使用的是Win10操作系统和Git 2.35.1版本。

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

我觉得我的Git Bash终端存在一些编码问题。比如,如果我输入java,我收到的消息全部是乱码。

(老实说,我不确定为什么我的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?


1
您可以按照此处的描述永久切换区域设置:https://dev59.com/JFfUa4cB1Zd3GeqPLtjR - orhtej2
我们使用终端仿真器更好地处理utf8。 - orhtej2
你能粘贴一下 java |& xxd 的第一行吗? - Philippe
@Philippe 00000000: d3c3 b7a8 a3ba 6a61 7661 205b 6f70 7469 ......java [opti @Philippe 00000000: d3c3 b7a8 a3ba 6a61 7661 205b 6f70 7469 ......java [opti - Reimirno
@user16320675 在 Windows CMD 中,Java 能够正确打印中文字符。例如:C:\Windows\System32>java 用法:java [options] <主类> [args...] (执行类) 或 java [options] -jar <jar 文件> [args...] (执行 jar 文件)等等。只有 Git Bash 会出现编码问题。 - Reimirno
@orhtej2 很好。通过你的链接找到了一个可行的解决方案。 - Reimirno
2个回答

2

首先,在这里检查是否有效:

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

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

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

如果这个命令有效,你可以通过环境变量JAVA_TOOL_OPTIONS来设置这些选项。
但是,自JDK9+以来,JDK_JAVA_OPTIONS也是一个有效的替代方案。


无法工作。 第一行似乎是java命令的错误用法,因为当我在bash中输入它时,它会打印出java命令的帮助信息。 - Reimirno
这似乎是预料之中的,因为java命令后面没有跟随任何其他子命令。不过它是否完全以英语打印帮助信息呢?或者像你的问题一样,它是否仍然混合使用多种语言? - VonC
是的。如果我在Java命令后面添加“-Duser.language=en -Duser.country=US”,那么日志将以英语打印。但是您必须每次都这样做。 - Reimirno
1
@LongYu 很好,我一直在等待这个确认来建议 JAVA_TOOL_OPTIONS。我已经相应地编辑了答案。 - VonC

2

按照这里的说明,我找到了一个永久性解决方案: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...]
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接