コマンドプロンプトでUnrealEditor-Cmd.exeを実行するとLCIDが変更される

お世話になっております。

コマンドプロンプトでUnrealEditor-Cmd.exeを実行すると

LCIDが1041(日本語) ⇒ 1033(英語)へ変更されてしまうようです。

そのため、以降の日本語が文字化けするなど問題が発生しています。

​

EpicGameLauncherから各種UEバージョンをダウンロードし確認してみた所

5.0~5.5までは問題無く、5.6~5.8の間では同様の症状が確認できました。

情報は有りますでしょうか。

​

■確認方法

​コマンドプロンプトで、下記を実行

1. powershell -Command “[System.Threading.Thread]::CurrentThread.CurrentUICulture”

2. “Engine\Binaries\Win64\UnrealEditor-Cmd.exe” -run=Dummy

3. powershell -Command “[System.Threading.Thread]::CurrentThread.CurrentUICulture”

​

■テスト時のログになります。

D:\UE\UE_5.6>powershell -Command "[System.Threading.Thread]::CurrentThread.CurrentUICulture"

LCID       Name       DisplayName
----       ----       -----------
1041       ja-JP      日本語 (日本)

D:\UE\UE_5.6>"Engine\Binaries\Win64\UnrealEditor-Cmd.exe" -run=Dummy
(ログ略

D:\UE\UE_5.6>powershell -Command "[System.Threading.Thread]::CurrentThread.CurrentUICulture"

LCID       Name       DisplayName
----       ----       -----------
1033       en-US      English (United States)

[Attachment Removed]

再現手順

​コマンドプロンプトで、下記を実行

1. powershell -Command “[System.Threading.Thread]::CurrentThread.CurrentUICulture”

2. “Engine\Binaries\Win64\UnrealEditor-Cmd.exe” -run=Dummy

3. powershell -Command “[System.Threading.Thread]::CurrentThread.CurrentUICulture”

[Attachment Removed]

お世話になっております。

再現手順をありがとうございます!おかげさまで当方でもスムーズに再現をとることができました。

大変助かりました。

ご指摘の通り、UE5.5 → 5.6 の変更でコンソールの出力コードページ周りに手が入っており、結果として LCID の変更を引き起こしておりました。こちらは、そもそも Windows で日本語などの非 ASCII 文字を stdout に出すと化けていたのを直すためだったのですが、今度はコンソール側がおかしくなってしまったようです。

不具合として社内に報告をあげようと考えておりますが、当面の問題を回避するため、以下に挙げるいずれかの方法をご検討いただけますでしょうか。

■別コンソールで実行する

start /wait "" "Engine\Binaries\Win64\UnrealEditor-Cmd.exe" <引数>

■可能であれば GUI 版の UnrealEditor.exe に切り替える

Cmd 版と同一バイナリで引数も共通ですが、親コンソールに接続しないため、今回の影響が出ないようです。

■エンジンに手を入れ、標準動作をオプトアウトする

Engine/Source/Runtime/Core/Private/Windows/WindowsPlatformMisc.cpp の FWindowsPlatformMisc::SetUTF8Output()(5.8 では 1420 行目付近)を以下のようにしていただくと、環境変数でオプトアウトできます。

void FWindowsPlatformMisc::SetUTF8Output()
{
  if (!FWindowsPlatformMisc::GetEnvironmentVariable(TEXT("UE_NO_UTF8_OUTPUT")).IsEmpty())
  {
    return;
  }
 
  SetConsoleOutputCP(CP_UTF8);
}

set UE_NO_UTF8_OUTPUT=1 を実行してから実行ファイルを呼び出していただければ、オプトアウトが機能します。なお、この関数はコマンドライン解析より前に呼ばれるため、起動引数での分岐が簡単ではなく、環境変数を利用したコード例をご提示した次第です。

大枠としては、UnrealEditor-Cmd.exe が起動時に出力コードページを UTF-8 (65001) へ変更し、終了時に元へ戻さないため、以降そのコンソールに影響が残り続けるという構図になっています。よって望ましい対応としては起動時にもともとの CP をキャッシュし、終了時に元に戻すことなどが考えられますが、こちらは少し大掛かりな変更となるため、Epic 側の課題として持ち帰らせていただきます。

以上、よろしくお願いいたします。

[Attachment Removed]

返答ありがとうございます。

UnrealEditor-Cmd.exeの問題であり、報告していただき

将来的に修正される可能性があるという事で了解しました。

また、回避手法を多数教えていただき大変助かります。

ひとまず何れかの方法で回避してみたいと思います。

回避が確認出来ましたら、ご報告させていただきます。

迅速な対応ありがとうございました。

[Attachment Removed]

> ■別コンソールで実行する

> ■可能であれば GUI 版の UnrealEditor.exe に切り替える

上記は、元のbat側にログが出力されず不都合があるため未採用。

> ■エンジンに手を入れ、標準動作をオプトアウトする

上記は、Editor側の出力の何れかが文字化するなど

変更後の他への影響が不安という事で未採用。

という事で、UnrealEditor-Cmd.exe呼び出し後に

chcp 932で回避することになりました。

ひとまず回避が出来たという事で、質問はクローズし

正式な対応を待ちたいと思います。

迅速な対応ありがとうございました。

[Attachment Removed]

お世話になっております。

ご確認ありがとうございます。

​

chcpで回避されたとのこと、承知いたしました。

こちらでご提案した回避策がいずれもイマイチで、誠に申し訳ありません・・・

​

本件は社内のバグトラッカーに登録を行い、Public Issue​化の申請も行いました。

Public化の承認され次第、下記のURLから​修正状況を追跡していただけます。

https://issues.unrealengine.com/issue/UE\-396183

​

また、お言葉に甘えて本件はクローズとさせていただきます。

今後も何かございましたら、お気軽にEPSをご利用いただければと思います。​

以上、よろしくお願いします。

[Attachment Removed]