#VS2019 16.6以降でなにかが起きた
日本語版VS2019 16.6以降でUE4をビルドすると、コンパイルエラーの文字が盛大に文字化けします。
VS2019 16.6で適用されたVS内のMicrosoft.MakeFile.Targetで chcp 65001 などのコマンドをつかってutf-8化が行われたのが原因です。
このファイルを見るとわかりますが、NMakeUseOemCodePageプロパティによって旧来の動作と新しい動作が切り替わるようになっているのがわかります。
#古い動作を使うようにUBTを修正する
このプロパティはプロジェクトファイルに設定することで動作が変わります。
UE4ではプロジェクトファイルは直接は弄らず、GenerateProjectFiles.bat (中はUBTの呼び出し) によって作成されるので
UBTに変更を加える必要があります。
// Project globals (project GUID, project type, SCC bindings, etc)
{
VCProjectFileContent.AppendLine(" <PropertyGroup Label=\"Globals\">");
VCProjectFileContent.AppendLine(" <ProjectGuid>{0}</ProjectGuid>", ProjectGUID.ToString("B").ToUpperInvariant());
VCProjectFileContent.AppendLine(" <Keyword>MakeFileProj</Keyword>");
VCProjectFileContent.AppendLine(" <RootNamespace>{0}</RootNamespace>", ProjectName);
VCProjectFileGenerator.AppendPlatformToolsetProperty(VCProjectFileContent, ProjectFileFormat);
VCProjectFileContent.AppendLine(" <MinimumVisualStudioVersion>{0}</MinimumVisualStudioVersion>", VCProjectFileGenerator.GetProjectFileToolVersionString(ProjectFileFormat));
/*----->*/ VCProjectFileContent.AppendLine(" <NMakeUseOemCodePage>true</NMakeUseOemCodePage>"); //これを追加
VCProjectFileContent.AppendLine(" <TargetRuntime>Native</TargetRuntime>");
VCProjectFileContent.AppendLine(" </PropertyGroup>");
}
変更を適用したらGenerateProjectFiles.batでプロジェクトファイルの更新をおこなってください。
正しいエラー文字列が表示されるようになりました。めでたしめでたし。
#追記
ビルドしたときに Microsoft.MakeFile.targets
ファイルの中で System32\chcp.com 65001 > NUL
がどうたらこうたらというエラーが出る場合もこれで解決します。
1>C:\Program Files (x86)\(略)\v160\Microsoft.MakeFile.Targets(46,5): error MSB3073: The command "C:\WINDOWS\System32\chcp.com 65001 >NUL
#謝辞&リンク
調査には @steel_code さんのこの記事に大変助けられました!ありがとうございます!
VS2019でUE4のビルド時に日本語出力が文字化けする
Redditでも同じところで問題が出ているケースが報告されています。
https://www.reddit.com/r/unrealengine/comments/gphjjj/unable_to_compile_c_project_425/