参考にしたページ:
http://d.hatena.ne.jp/osyo-manga/20110406http://blog.cppcms.com/post/105
確認環境
- Windows7 x64 with SP1 日本語版
- VisualStudio2013 update1 日本語版
- Cygwin(2014/08/06時点での最新版をALL Install → clang3.4.2がついてきた)
やり方
BOMつきUTF-8ファイルにし、先頭に以下を入れる:#if defined(_MSC_VER)
#pragma execution_character_set("utf-8")
#endif
それをコンソールに出力する場合、Windows環境では以下のようにする:
_setmode(::_fileno(stdout), _O_U16TEXT);
// _O_U8TEXT にして printf を使うと実行時エラーになって落ちる。
auto len = strlen(text);
wchar_t converted[1024];
auto len2 = MultiByteToWideChar(CP_UTF8, 0, text, len, converted, 1024);
if(len2 != 0)
{
converted[len2] = 0;
wprintf(converted);
}
その他
Linuxでビルドしたclangも同じ動作かどうかは未確認。VisualStudio2012はpragma execution_character_setが使えない(update4でも)。VisualStudio2010はOKらしい。