ブルータスお前もか
windresがMS932のダメ文字対策(?)がされていないことから、ふっと気になる。gccってどうなんだろう…
と、言うわけで、使い回しで「printf("ファイル構成\n")」を試してみる。
>gcc main.c main.c: In function 'main': main.c:8:9: warning: unknown escape sequence: '\220' [enabled by default]
っく、貴様もか…。EUCとUTF-8でしかgccを動かしてこなかったツケが、ここに回ってきたか。仕方が無いUTF-8で作成するか。
それが、地獄への一本道と知らずに進むのであった。
で、UTF-8に変換。
>gcc -Wall main.c
うむ、エラーは何も出ないな。じゃ、取りあえず実行。ぽちっ。
>a 繝輔ぃ繧、繝ォ讒区・
まあ当然だな。さて、UTF-8のプロンプトは…chcp 65001で良いのか…フォントが変わって気持ちが悪いが、こんなものか。気を取り直して、ぽちっ。
>chcp 65001 Active code page: 65001 >a 繝
は?1文字?MS932の方がまだマシだぞ?ロケールがおかしいのかな〜
てな訳で、何がsetlocale()で設定されたのか確認してみる。
>gcc -Wall main.c >a Japanese_Japan.932 繝
あれ〜?MS932のままだぞ。こいつのせいか?UTF-8ってJapanese_Japan.65001で良いのかな?って932のままってどういうこと??
という訳で、msdnにお伺いを掛けてみる。
http://msdn.microsoft.com/ja-jp/library/x99tb11d%28v=vs.80%29.aspx
ふむふむ、OSからロケールを引っ張ってくるから、動作しているコードページが何であれMS932のままなのだな!って今大事な所を読み飛ばしたぞ!!
使用できる言語、国/地域コード、およびコード ページには、Win32 NLS API でサポートされるものがすべて含まれます (ただし、UTF-7 や UTF-8 のように、1 文字に 3 バイト以上必要なコード ページは除きます)。UTF-7 や UTF-8 などのコード ページを指定した場合、setlocale は実行に失敗し、NULL が返されます。
は?…(暫く固まる)…はぁぁぁぁぁぁぁぁぁ?馬鹿な!UTF-8な今の状況はどーすりゃ良いんだ!ソースはUTF-8、内部はUNICODE(?)、表示はMS932にしろってことか!んな鬼みたいな環境やってられるか。
こりゃ本格的にコンソールをどうにかするか、コンパイラをMS製かBorland C++にするか考えないと駄目か〜
ちなみに、なぜかリダイレクトしたファイルの中は、正常に出力されて文字もUTF-8が使われていました。謎
>a > OUT.txt >type OUT.txt Japanese_Japan.932 ファイル構成