VisualStudio 2010 環境限定ではあるけれど、ソースコードがBOM付UTF-8であれ、ShiftJISであれ、文字リテラルを UTF-8 で処理させて、実行体Exeの中に格納できる方法を発見しました。
int main() { char str[] = "あああ"; printf( "%s", str ); return 0; }
このようなコードを作成してWindows日本語版の環境下でビルドした場合、その実行体の中に含まれる文字列は、Shift JIS (MS932) となってしまいます。 これはビルド設定の「文字セット」の設定とは無関係で、元のソースコードがどの文字エンコーディングを使っているかにも関係なく、ShiftJISとなってしまうようです。
この状態がちょっと都合が悪いことがあって、出来上がった実行体の中に UTF-8 で文字列で格納しておいてほしいというのが実現したいことです。
すなわち、上記の文字列 「あああ」をエディタで(ShiftJISやUTF-8など)で通常通りに入力し、それをUTF-8化したままで exe の中に格納しておく、ということがやりたいわけです。
その方法が、ソースコードを下記のように変更することで実現できました。
#pragma execution_character_set("utf-8") int main() { char str[] = "あああ"; printf( "%s", str ); return 0; }
これで実行体の中にはUTF-8符号化した状態で、日本語が格納されています。
ただ、VisualStudio2010ではこの機能が動作しましたが、VisualStudio2012(update3)では動作しませんでした。
今回試せなかった他のVS2008やVS2013の環境でそのうち動作チェックしてみようと思います。
コメント