読者です 読者をやめる 読者になる 読者になる

syghの新フラグメント置き場

プログラミングTipsやコード断片の保管場所です。お絵描きもときどき載せます。

Visual C++とUTF-8マルチバイト

プログラミングTips C++

Visual C++には

#pragma execution_character_set("utf-8")

というプラグマがあって、これを使うとコンパイル時にマルチバイト文字列リテラル(プレフィックスなしの"XXX")をOSのANSIコードページ文字列リテラルShift_JIS:CP932とか)ではなくUTF-8文字列リテラルとして扱うようにすることができるんですが、Visual C++ 2012では使えなくなってるようですね。Visual C++ 2013では復活してる模様。ちなみにVCではソースファイルのテキストエンコードコンパイル結果に直接関係ありませんが、ワイド文字列リテラル(L"XXX")やコメントの中に直接Unicode文字を埋め込む場合はUTF-8/UTF-16エンコードを使います。たとえ今すぐ国際化対応はしないとしても、Shift_JISその他のANSIエンコードはこの先使い続けていてもいいことは何ひとつないし害悪になるだけなので、さっさとドブに捨てましょう。

それはそうとC++11のu8プレフィックスも早くサポートして欲しいです。つってもWindowsのネイティブエンコードUTF-16なのであまり使うことはないと思いますが……LuaやFBX SDKみたいにWindowsにおいても内部エンコードUTF-8ベースであるようなライブラリを使うときは利用価値があるかもしれません。