【UE4.26.2】日本語環境でVSプロジェクトを生成し、UE4上からC++コードをコンパイルすると日本語が文字化けをする

【環境】

windows 10 ver 1903

Unreal Engine 4.26.2 (ラウンチャーよりインストール)

Visual Studio Professional 2019 (日本語パックインストール)

【現象】

上記の環境でUE4 プロジェクトを作成、C++コードを追加、コンパイルを行うとメッセージログの日本語が文字化けを起こします

【試した事】

ログを確認したところ、UnrealBuildTool.exe(以下「UBT」)をもちいてコードのビルドを行い、UBTのログ出力をメッセージログへリダイレクトしてそうだったため、原因がwindows標準出力文字コードのShift-jisとUE4で扱っている文字コード(恐らくutf-8?)のずれだと思い、UBTソースファイルのMainにConsole.OutputEncoding = Encoding.GetEncoding(“utf-8”);を追加し、リビルドしました。

こちらの対応で日本語の文字化けは解消できております。

【質問内容】

こちらの文字化けですが、Epic Games様の方では認識されておりますでしょうか?
また、UBTのリビルドに自分自身リスクがあると感じている為、他に日本語を表示する解決方法がありましたらお伺いしたいです。

2 Likes

Unreal Engine 5.2.1 had the same problem and required not only the above change but also a change to not specify CREATE_NO_WINDOW to CreateProcess():

diff -r -u -x obj "c:/Program Files/Epic Games/UE_5.2/Engine/Source/Programs/Shared/EpicGames.Core.orig/ManagedProcess.cs" "c:/Program Files/Epic Games/UE_5.2/Engine/Source/Programs/Shared/EpicGames.Core/ManagedProcess.cs"
--- "c:/Program Files/Epic Games/UE_5.2/Engine/Source/Programs/Shared/EpicGames.Core.orig/ManagedProcess.cs"	2023-10-27 09:49:11.301884400 +0900
+++ "c:/Program Files/Epic Games/UE_5.2/Engine/Source/Programs/Shared/EpicGames.Core/ManagedProcess.cs"	2024-01-05 12:22:14.575133200 +0900
@@ -615,7 +615,7 @@
 				try
 				{
 					// Get the flags to create the new process
-					ProcessCreationFlags flags = ProcessCreationFlags.CREATE_NO_WINDOW | ProcessCreationFlags.CREATE_SUSPENDED;
+					ProcessCreationFlags flags = ProcessCreationFlags.CREATE_SUSPENDED;
 					switch (priority)
 					{
 						case ProcessPriorityClass.Normal:
@@ -853,7 +853,7 @@
 			_frameworkProcess.StartInfo.RedirectStandardOutput = true;
 			_frameworkProcess.StartInfo.RedirectStandardError = true;
 			_frameworkProcess.StartInfo.UseShellExecute = false;
-			_frameworkProcess.StartInfo.CreateNoWindow = true;
+			_frameworkProcess.StartInfo.CreateNoWindow = false;
 			_frameworkProcess.Exited += (sender, e) =>
 			{
 				_frameworkExitTime = DateTime.Now;
diff -r -u -x obj "c:/Program Files/Epic Games/UE_5.2/Engine/Source/Programs/UnrealBuildTool.orig/UnrealBuildTool.cs" "c:/Program Files/Epic Games/UE_5.2/Engine/Source/Programs/UnrealBuildTool/UnrealBuildTool.cs"
--- "c:/Program Files/Epic Games/UE_5.2/Engine/Source/Programs/UnrealBuildTool.orig/UnrealBuildTool.cs"	2023-10-27 09:49:11.915732500 +0900
+++ "c:/Program Files/Epic Games/UE_5.2/Engine/Source/Programs/UnrealBuildTool/UnrealBuildTool.cs"	2024-01-05 12:16:33.475648600 +0900
@@ -486,6 +486,7 @@
 
 				// Register encodings from Net FW as this is required when using Ionic as we do in multiple toolchains
 				Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+				Console.OutputEncoding = Encoding.UTF8;
 
 				// Get the type of the mode to execute, using a fast-path for the build mode.
 				Type? ModeType = typeof(BuildMode);

Feedback & Requestsというカテゴリがあるのでそちらを利用してみてはいかがでしょうか