避免Visual Studio Code任务出现乱码的dotnet命令输出


TL; DR;

  • 在日语Windows中,dotnet命令输出为UTF-8,因此字符乱码。

    • 要解决此问题,请运行chcp 65001以使控制台代码页为UTF-8。
  • Windows特定的设置可以在VS Code任务定义中作为windows进行。

    • chcp 65001之后指定在那里执行dotnet命令

怎么了

我认为Visual Studio代码(以下称为VS代码)以及Visual Studio for .NET Core应用程序开发经常被使用。

VS Code是在无法使用完整Visual Studio(以下简称VS)的macOS和Linux桌面中经常使用的映像,但是即使在Windows中,它也比VS轻巧,并且还具有调试器,因此需要一点开发然后,它的工作出乎意料的好。

问题是,当您在任务中执行dotnet命令时,输出结果会出现乱码。 dotnet命令以UTF-8格式输出到标准输出等,但是由于日语Windows的默认编码为MS932(所谓的Shift-JIS),即使按原样执行,字符也会出现乱码。它是。

image.png

*参考:dotnet核心支持的文本编码| OPC Diary

作为一种解决方法,似乎可以在执行cmd.exe时弄乱注册表以自动执行chcp 65001(65001是UTF-8的代码页),但这仅是出于此目的。老实说,我讨厌更改cmd.exe的代码页。

*参考:如何在启动命令提示符时自动将字符代码更改为UTF-8,以便可以正确显示日语--Qiita

解决方案

因此,在VSCode的任务定义中,不是仅在Windows中执行dotnet命令,而是在通过cmd执行chcp 65001之后执行dotnet命令。我们开始做吧。具体来说,在定义默认的command等后,添加windows设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
    "version": "0.1.0",
    "command": "dotnet",
    "isShellCommand": true,
    "args": [],
    "windows": {  // Windows固有の設定
        "command": "cmd", // cmd.exeを実行
        "args": [ "/C", "chcp 65001 && dotnet"] // /Cオプションで第二引数のコマンドを実行
    },                                          // chcp 65001 の後に && で続けてdotnetを実行するよう指定
    "tasks": [
        {
            "taskName": "build",
            "args": [
            ],
            "isBuildCommand": true,
            "problemMatcher": "$msCompile"
        },
    ]
}

*参考:自定义任务-Visual Studio Code

中的任务

如果运行

构建,则可以看到已经消除了乱码。

image.png

现在,您可以使用VSCode进行舒适的.NET Core开发!