LoginSignup
16
14

More than 5 years have passed since last update.

Visual Studio Codeタスクのdotnetコマンド出力を文字化けしないようにする

Last updated at Posted at 2017-08-28

TL;DR;

  • 日本語Windowsではdotnetコマンド出力がUTF-8のため文字化けする
    • 解決するにはchcp 65001を実行してコンソールのコードページをUTF-8にする
  • VSCodeのタスク定義ではwindowsとしてWindows固有の設定ができる
    • そこにchcp 65001の後にdotnetコマンドを実行するよう指定する

何が問題か

.NET Coreなアプリ開発はVisual Studioはもちろん、Visual Studio Code(以下VSCode)が使われることも多くなってきたかと思います。

VSCodeはフルのVisual Studio(以下VS)が使えないmacOSやLinux Desktopでよく使われているイメージですが、WindowsでもVSに比べ動作が軽快ですし、デバッガもついていますので、ちょっとした開発では案外十分に機能します。

そこで問題となるのがタスクでdotnetコマンドを実行した際、出力結果が文字化けすることです。dotnetコマンドはUTF-8で標準出力等に出力するのですが、日本語Windowsの既定のエンコーディングが、MS932(いわゆるShift-JIS)であるため、ただそのまま実行しても文字化けしてしまうのです。

image.png

※参考 : dotnet coreで対応しているテキストエンコーディング | OPC Diary

その回避策としては、cmd.exeを実行時に自動でchcp 65001(65001はUTF-8のコードページ)を実行するようレジストリをいじるといったこともできるようですが、このためだけにすべてのcmd.exeのコードページを変更するのは、正直嫌です。

※参考 : コマンドプロンプト起動時、自動的に文字コードをUTF-8にして日本語もちゃんと表示できるようにする方法 - Qiita

解決法

そこで、VSCodeのタスク定義のところで、Windowsの時だけdotnetコマンドを実行するのではなく、cmdを経由してchcp 65001を実行した後にdotnetコマンドを実行するようにしましょう。具体的には、既定のcommandなどを定義した後に、windowsの設定を追加します。

{
    "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"
        },
    ]
}

※参考 : Custom Tasks - Tasks in Visual Studio Code

ビルドを実行すると、確かに文字化けが解消されていることが確認できます。

image.png

これであなたも快適な.NET Core開発 with VSCodeライフを!

16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14