UE4開発におけるコンソールログの文字化け対処法
はじめに
初めまして応用技術部の小島と申します。
こちらの投稿は Unreal Engine を触りはじめた方向けの記事となっております。
よろしくお願いいたします。
本記事では、
- ”VS2019でのコンパイル時の日本語の文字化け”問題
- ”UnrealEditerのOutputLogの日本語の文字化け”問題
について解説していこうと思います。
特に必要なスキルなどはないと思うので、
同じ問題に遭遇した場合は是非参考にしていただければと思います。
”VS2019でのコンパイル時の日本語の文字化け”問題
環境
Visual Studio 2019
Unreal Engine 4.25
問題
Unreal Engine を触りはじめて、序盤で引っかかる問題として起こり得たのが、”VS2019でのコンパイル時の日本語の文字化け”問題でした。
まず、コンパイルが通らないあからさまなエラーがあったとします。
エラーの説明文が、全く分からないです。
Visual Studioを日本語のまま使いたい人向けの記事になっています。
英語でもいいので根本的に修正したい方は、
”OutputLogの日本語の文字化け”問題 で修正しています。
修正方法
1. 以下のファイルをコピーしてバックアップをとる
C:\Program Files (x86)\Microsoft Visual Studio\2019\ $(Edition)\MSBuild\Microsoft\VC\v160\Microsoft.MakeFile.targets
2. 1.のファイルに記載されているBuild,ReBuild のTargetのうち 、”UTF-8″ Encodingを削除する
変更前
~~~省略~~~
<Target Name=”Build” DependsOnTargets=”PrepareForNMakeBuild;ResolveReferences;GetTargetPath;$(PreNMakeBuildTarget)” Returns=”$(NMakeManagedOutput)”>
<VCMessage Code=”MSB8005″ Type=”Warning” Arguments=”NMakeBuildCommandLine” Condition=”‘$(NMakeBuildCommandLine)’==””/>
<Exec Command=”$(NMakeBuildCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ == ‘true’ and ‘$(NMakeBuildCommandLine)’!=””/>
<Exec Command=”$(NMakeBuildCommandLine)” UseUtf8Encoding=”Always” StdErrEncoding=”UTF-8″ StdOutEncoding=”UTF-8″ Condition=”‘$(NMakeUseOemCodePage)’ != ‘true’ and ‘$(NMakeBuildCommandLine)’!=””/>
</Target>
<Target Name=”Rebuild” DependsOnTargets=”PrepareForNMakeBuild;_SetRebuildReferences;ResolveReferences;GetTargetPath;$(PreNMakeBuildTarget)” Returns=”$(NMakeManagedOutput)”>
<VCMessage Code=”MSB8005″ Type=”Warning” Arguments=”NMakeReBuildCommandLine” Condition=”‘$(NMakeReBuildCommandLine)’==” and (‘$(NMakeCleanCommandLine)’==” or ‘$(NMakeBuildCommandLine)’==”)”/>
<Exec Command=”$(NMakeReBuildCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ == ‘true’ and ‘$(NMakeReBuildCommandLine)’!=””/>
<Exec Command=”$(NMakeCleanCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ == ‘true’ and ‘$(NMakeReBuildCommandLine)’==” and ‘$(NMakeCleanCommandLine)’!=” and ‘$(NMakeBuildCommandLine)’!=”” />
<Exec Command=”$(NMakeBuildCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ == ‘true’ and ‘$(NMakeReBuildCommandLine)’==” and ‘$(NMakeCleanCommandLine)’!=” and ‘$(NMakeBuildCommandLine)’!=”” />
<Exec Command=”$(NMakeReBuildCommandLine)” UseUtf8Encoding=”Always” StdErrEncoding=”UTF-8″ StdOutEncoding=”UTF-8″ Condition=”‘$(NMakeUseOemCodePage)’ != ‘true’ and ‘$(NMakeReBuildCommandLine)’!=””/>
<Exec Command=”$(NMakeCleanCommandLine)” UseUtf8Encoding=”Always” StdErrEncoding=”UTF-8″ StdOutEncoding=”UTF-8″ Condition=”‘$(NMakeUseOemCodePage)’ != ‘true’ and ‘$(NMakeReBuildCommandLine)’==” and ‘$(NMakeCleanCommandLine)’!=” and ‘$(NMakeBuildCommandLine)’!=”” />
<Exec Command=”$(NMakeBuildCommandLine)” UseUtf8Encoding=”Always” StdErrEncoding=”UTF-8″ StdOutEncoding=”UTF-8″ Condition=”‘$(NMakeUseOemCodePage)’ != ‘true’ and ‘$(NMakeReBuildCommandLine)’==” and ‘$(NMakeCleanCommandLine)’!=” and ‘$(NMakeBuildCommandLine)’!=”” />
</Target>
~~~省略~~~
Microsoft.MakeFile.targets
変更後
~~~省略~~~
<Target Name=”Build” DependsOnTargets=”PrepareForNMakeBuild;ResolveReferences;GetTargetPath;$(PreNMakeBuildTarget)” Returns=”$(NMakeManagedOutput)”>
<VCMessage Code=”MSB8005″ Type=”Warning” Arguments=”NMakeBuildCommandLine” Condition=”‘$(NMakeBuildCommandLine)’==””/>
<Exec Command=”$(NMakeBuildCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ == ‘true’ and ‘$(NMakeBuildCommandLine)’!=””/>
<Exec Command=”$(NMakeBuildCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ != ‘true’ and ‘$(NMakeBuildCommandLine)’!=””/>
</Target>
<Target Name=”Rebuild” DependsOnTargets=”PrepareForNMakeBuild;_SetRebuildReferences;ResolveReferences;GetTargetPath;$(PreNMakeBuildTarget)” Returns=”$(NMakeManagedOutput)”>
<VCMessage Code=”MSB8005″ Type=”Warning” Arguments=”NMakeReBuildCommandLine” Condition=”‘$(NMakeReBuildCommandLine)’==” and (‘$(NMakeCleanCommandLine)’==” or ‘$(NMakeBuildCommandLine)’==”)”/>
<Exec Command=”$(NMakeReBuildCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ == ‘true’ and ‘$(NMakeReBuildCommandLine)’!=””/>
<Exec Command=”$(NMakeCleanCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ == ‘true’ and ‘$(NMakeReBuildCommandLine)’==” and ‘$(NMakeCleanCommandLine)’!=” and ‘$(NMakeBuildCommandLine)’!=”” />
<Exec Command=”$(NMakeBuildCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ == ‘true’ and ‘$(NMakeReBuildCommandLine)’==” and ‘$(NMakeCleanCommandLine)’!=” and ‘$(NMakeBuildCommandLine)’!=”” />
<Exec Command=”$(NMakeReBuildCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ != ‘true’ and ‘$(NMakeReBuildCommandLine)’!=””/>
<Exec Command=”$(NMakeCleanCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ != ‘true’ and ‘$(NMakeReBuildCommandLine)’==” and ‘$(NMakeCleanCommandLine)’!=” and ‘$(NMakeBuildCommandLine)’!=”” />
<Exec Command=”$(NMakeBuildCommandLine)” Condition=”‘$(NMakeUseOemCodePage)’ != ‘true’ and ‘$(NMakeReBuildCommandLine)’==” and ‘$(NMakeCleanCommandLine)’!=” and ‘$(NMakeBuildCommandLine)’!=”” />
</Target>
~~~省略~~~
Microsoft.MakeFile.targets
再度、Visual Studio 2019 のプロジェクトを開き直し、実行してみます。
修正できました!
原因
UE4では文字コードがUTF-8なのに対して、
日本語のVisual StudioではSJISが使われています。
その上でUTF-8に変換される過程によって文字化けが起こっているようです。
”UnrealEditerのOutputLogの日本語の文字化け”問題
環境
Visual Studio 2017(補足:UE4のビルド設定がVS2017になっているようなので)
Unreal Engine 4.25
問題
今回は以下のような、UE4のOutputLogでの文字化けの修正方法を書いていこうと思います。
”VS2019でのコンパイル時の日本語の文字化け”問題 では、
UE4ではUTF-8を、日本語のVisualStudioでSJISが使われており、
その上でのUTF-8への変換が原因でした。
そうであれば、VisualStudioをUTF-8、
つまり英語にすればいいのではないかと思い、VisualStudioの言語パックを日本語から英語に変えました。
修正方法
- Visual Studio Professional 2017->”変更”->”言語パック” を開く
- 日本語のチェックボックスを外し、英語のチェックボックスにチェックを入れ、”変更”。
修正後
文字化けしていた部分が、修正されました。
原因
UE4がVisualStudio(SJIS)にビルドを命令し、結果をUE4(UTF-8)のエディター上で表示していたからだと思われます。
終わりに
少しでも皆さんの問題解決のヒントになれたら幸いです。
お読みいただきありがとうございました!
参考リンク
http://unrealengine4yorozu.blog.fc2.com/blog-entry-28.html
https://qiita.com/EGJ-Takashi_Suzuki/items/23f9ae5fdddae217d841#_reference-94b47deaeee7373f37ca
http://unrealengine4yorozu.blog.fc2.com/blog-entry-28.html