tech.guitarrapc.cóm

Technical updates

pulumi up 時の文字化け対策

この記事は、Pulumi dotnet Advent Calendar 2019 の19日目です。

qiita.com

そろそろどうやるか見てみましょう。 と思ったのですが、日本語OS上では解決方法が見つからないのでゆるぼ。

目次

TL;DR

現状日本語 Windows では 打つ手なさそう

Summary

pulumi up をすると、dotnet コマンド処理が文字化ける。

cmd/powershell/pwsh のいずれでも発生。

.NET Core ���� Microsoft (R) Build Engine �o�[�W���� 16.3

出力というよりこっちの文字化けをどう対応するか

NOTE: だめな方法

CodePagesEncodingProvider

よく、出力文字列に関しては Encoding の違いということで次の対応がとられる。

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

しかしこれでは、dotnet コマンドの文字化けは解消しない。

f:id:guitarrapc_tech:20191209031515p:plain

chcp

dotnet build がdotnet exec を介しているなら、ということでdotnet 出力が utf-8 であるという前提でコンソールの文字エンコーディングを utf-8にして合わせてみる。

ようはこれ。

.NET Core task outputs garbled characters in build log on non EN-US environments. · Issue #1344 · microsoft/azure-pipelines-agent

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

この方法で取られるのが、コンソール文字列のエンコーディングを chcp 65001 で utf-8 にしてみる。

が、ダメ。

f:id:guitarrapc_tech:20191209031524p:plain

dotnet の言語を変えるようにしてみる

MSBuild should respect upstream tool language requests · Issue #1596 · microsoft/msbuild · GitHub

set DOTNET_CLI_UI_LANGUAGE=en
set VSLANG=1033

だめ。

f:id:guitarrapc_tech:20191209031546p:plain

推察

dotnet は単純に実行するとコンソールに合わせて文字化けしない。つまり shift-jis で出力している。

が、pulumi up 時に dotnet の出力を食ってはいているので、ここが utf-8 を前提にしている可能性がある。

pulumi/up.go at master · pulumi/pulumi

dotnet > Go > Console の間のエンコーディングっぽいので、現時点では英語OS でという身もふたもない結果になりそう。

REF

.NET Core task outputs garbled characters in build log on non EN-US environments. · Issue #1344 · microsoft/azure-pipelines-agent