Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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ライフを!

masaru_b_cl
越後の在宅リモートワーカー / JavaとかC#とかGitとかTDDとかビルドとか洗濯とかアイロンとかを主に嗜んでおります
http://takanosho.wordpress.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした