VS代码Java系统输出编码

jjjwad0x  于 2023-01-01  发布在  Java
关注(0)|答案(4)|浏览(144)

Java系统输出的编码仅在Visual Studio代码中出现问题。
我的程序很简单:

public class Main {
    public static void main(final String[] args) {
        System.out.println("Příliš žluťoučký kůň úpěl ďábelské ódy");
    }
}

但输出如下所示:
第一个月
我的文件采用UTF-8编码,并且正在使用-Dfile.encoding=UTF-8标志进行编译。我在Visual Studio代码中使用的是Microsoft的官方Java扩展包。

rslzwgfq

rslzwgfq1#

由于你已经安装了“Java扩展包”,并且提到了“-Dfile.encoding=UTF-8”,所以,你是通过“Debugger for Java”扩展进行调试的。这导致了我想重现你的问题的失败。
我试着编辑终端的编码,通过task.json,或者在settings.json中添加“terminal.integrated.shellArgs.windows“:["/K”,“chcp 65001”],但是两者都不起作用。
当然,“Debugger for Java”扩展将打开一个新的终端来执行命令,因为上面的设置不会对该终端产生影响。
所以,我可以重现你的问题这一次,因为我打开“launcher.bat”文件,这显示在命令,并改变代码-〉“chcp.com 65001〉NUL”在它.任何其他数量的chcp.com将导致你的问题.
所以,也许,这能给你一些启发。

u2nhd7ah

u2nhd7ah2#

vscode与原始的“javac,java”命令不同,因为vscode依赖于扩展来执行这些命令。
通过“RedHat对Java(TM)的语言支持”扩展将.java文件编译为. class文件,并自定义添加“-encoding utf8”参数。
通过“Debugger for Java”扩展将终端“chcp”更改为“65001”,并使用“-Dfile.encoding=UTF-8 "确保JVM以编码”utf8“启动。
你可以通过添加环境变量达到同样的效果:“JDK_JAVAC_OPTIONS”:“-编码utf8”、“JDK_JAVA_OPTIONS”:“-D文件.编码=UTF-8”和“chcp 65001 "临时更改终端编码。
这是非常复杂和奇怪的,因为我不能确定什么是'java','javac'默认编码,我已经尝试了很多,但仍然困惑,因为我谷歌了很多,但不能得到足够的信息。但一切都包括在这三个变量,我希望这能为您提供一些有用的信息,我太累了。对不起...

cnjp1d6j

cnjp1d6j3#

对于代码运行器扩展,只需将此代码添加到用户设置json中:

"code-runner.executorMap":{"java": "cd $dir && javac -encoding utf-8 $fileName && java $fileNameWithoutExt",},
"code-runner.runInTerminal": true,
t1rydlwq

t1rydlwq4#

我也遇到过类似的问题。我的环境有点复杂。我同时使用“Code-Runner”和“Java-extensionPack”。这似乎让我更难解决这个问题。
经过几次尝试,我发现下面的事情。
1.当我使用运行图标(在右上方),'代码运行者' compine和运行我的代码在“输出”,这显示破碎的朝鲜字符。
1.当我使用“运行〉调试”或“运行〉运行而不调试”时,“Java扩展包”在“TERMINAL”中编译并运行我的代码,它正确地显示了韩文字符。
下面是我的最终设置。
A.工作区中的settings.json

  • 在“代码运行者.executoMap”中插入编码utf-8
....
"code-runner.executorMap": {
  "javascript": "node",
  "java": "cd $dir && javac -encoding utf-8 $fileName && java $fileNameWithoutExt",
.....
  "sml": "cd $dir && sml $fileName"
}

B.用户中的settings.json

  • 添加"java.jdt.ls.vmargs": "-Dfile.encoding=utf-8"
  • 相加"code-runner.runInTerminal": true

设置后,代码运行人员可以在“TERMINAL”(而不是“OUTPUT”)中很好地打印韩文字符,“java扩展包”也可以。

相关问题