おかしい。FireFoxではエディットボックスに対して過去の入力履歴が出るわけだが、この「MinGWなどいじって(ry)」は過去に書いたことがあるらしく履歴が出たが、ブログにはその形跡がない。
折角、滅多にやらない「自分の記事に自分でトラックバック」をやろうと思ったのに…
まあいいや。とにかく、前の情報は間違っていたと言う話。
MinGWが4.1.0になっていたので、入れてみた。
すると、GCCは3.4.2になった。
まあ、これ自体は、どうでもいい。
以前使っていたバージョンでは、これがUTF-8においてLリテラル指定を使っても正しいUnicode(つか、UTF-16)として展開されず、上位バイトが0x00でぶち消されて文字化けしてしまうという悲しい現象が発生していた。
というか、N県の方のPCに入れた古いMinGWではそうなっていた。
そこで、下に帰ってくると同時にその4.1.0を入れて、以下のようなコードを試してみた。
ソースファイルの文字エンコーディングはUTF-8で。
お、コンソールもメッセージボックスもバッチリ表示できた。というわけで。
もはやMinGWは日本語対応と言ってもいいのではないか、と。今更気づいてみたわけだったりして。
ただし、UTF-8はともかく相変わらずSJISなソースファイルでの問題点(0x955c「表」などの文字末尾が\\と誤認される)は解消されていないので、その辺は注意しておこう。
折角、滅多にやらない「自分の記事に自分でトラックバック」をやろうと思ったのに…
まあいいや。とにかく、前の情報は間違っていたと言う話。
MinGWが4.1.0になっていたので、入れてみた。
すると、GCCは3.4.2になった。
まあ、これ自体は、どうでもいい。
以前使っていたバージョンでは、これがUTF-8においてLリテラル指定を使っても正しいUnicode(つか、UTF-16)として展開されず、上位バイトが0x00でぶち消されて文字化けしてしまうという悲しい現象が発生していた。
というか、N県の方のPCに入れた古いMinGWではそうなっていた。
そこで、下に帰ってくると同時にその4.1.0を入れて、以下のようなコードを試してみた。
ソースファイルの文字エンコーディングはUTF-8で。
#include <windows.h> #include <stdio.h> int main() { HANDLE t_hConsole = GetStdHandle(STD_OUTPUT_HANDLE); if(t_hConsole != INVALID_HANDLE_VALUE) { DWORD t_written=0; WriteConsoleW( t_hConsole, L"表示のテストだが", 8, &t_written, NULL); } else printf("failed to get stdout handle"); MessageBoxW(NULL, L"こうやってメッセージボックスでも表示可能", L"タイトルもこんな感じ", MB_OK); return 0; }
お、コンソールもメッセージボックスもバッチリ表示できた。というわけで。
もはやMinGWは日本語対応と言ってもいいのではないか、と。今更気づいてみたわけだったりして。
ただし、UTF-8はともかく相変わらずSJISなソースファイルでの問題点(0x955c「表」などの文字末尾が\\と誤認される)は解消されていないので、その辺は注意しておこう。