お世話になっております。
コマンドプロンプトで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]