06/12/27 00:25:09
URLリンク(permalink.gmane.org)
を読んで思ったのですが、どうやらUTF-8にすれば完全解決というわけではな
いようですね。
g++ -finput-charset=EUC-JP
こう書くと、GCCはソースファイルを、includeされるヘッダライブラリまです
べてEUC-JPだとみなします。そしてそれを libiconv で UTF-8 に変換しよう
とします。このとき(ヘッダファイルに)EUC-JPに含まれない文字コード
(Latin-1など)があったらエラーになってしまいます。
g++ -finput-charset=UTF-8 (または-finput_charsetの指定なし)
こう書くと、GCCはソースファイルを、includeされるヘッダライブラリまです
べてUTF-8だとみなします。しかし今度は変換の必要がないので、libiconv は
呼ばれません。ヘッダライブラリも変換されません。
これで通常は問題はなくなるわけです。しかし、
・ヘッダライブラリのエンコーディングがUTF-8でない。
・ヘッダライブラリに wcha_tのリテラルがある。
(あまりないでしょうが、)この2つが同時に起こると、ライブラリは正しく
動作しません。
結局、すべてのヘッダファイルがUTF-8で統一されるか、Pythonのように各ソー
スファイルにエンコーディングの宣言ができるようにしないと、完全解決とは
言えないようです。いずれも一ユーザにはどうしようもない話ですが。
Boostとあんまり関係なくてすみません。