背景
Windows の .rc
ファイル(resource file)は, Visual Studio などで生成すると UTF-16(LE. BOM 付き) がデフォルトであり, 推奨の模様.
MinGW で Windows バイナリをコンパイルできるようにしたい.
問題
MinGW windres は, UTF-16 ファイルには対応していない. UTF-8? と想定してパースしてしまう.
.gitattributes
で .rc
に utf-16 le エンコーディングを指定している場合, .rc
を UTF-8 などに変換して commit しようとしようにも, convert できないエラーがでる.
llvm-mingw
llvm-mingw(clang コンパイラ)では, UTF-16 ファイルを読み込むことができない.
CMake でプロジェクト管理している場合, set_source_files_properties(myfile.rc PROPERTIES LANGUAGE RC) などとして resource ファイルであることを明示する必要がある.
llvm-rc
llvm-rc も同様に UTF-16 をサポートしていない(UTF-8 も?)
パッチが出ているがマージされていない(as of LLVM 10.0.0)
解決方法
.rc
の量が多くなければ, MinGW 用に別 .rc
ファイルを用意(UTF-8 or ASCII(cp932?))するのがよいと思われる. このとき, .gitattributes
でエンコーディング強制指定の問題を回避するため, 拡張子を変えておくのがよいでしょう.