本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

C++で UTF-8文字リテラルを使いたい

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の環境でそのうち動作チェックしてみようと思います。

プログラミング
すらりんをフォローする
すらりん日記

コメント

タイトルとURLをコピーしました