Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@masaru_b_cl

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

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

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
12
Help us understand the problem. What are the problem?