リンク元などから。
gcjが文字化けする? (java)
そんなアホなw
少なくとも
import java.lang.String; import java.lang.System; public class DecimalSeparator { public static void main(String[] A00) { System.out.printf("日本でやっほー%n"); } }
では化けんぞw
[lugia@lugia-castle ~]$ gcj DecimalSeparator.java -o DecimalSeparator --main=DecimalSeparator [lugia@lugia-castle ~]$ ./DecimalSeparator 日本でやっほー [lugia@lugia-castle ~]$
cout で出力した後 wcout で出力すると文字化けする (C++)
そんなバカなと思ったけどたしかにしますねw
#include <iostream> #include <locale> using namespace std; int main() { setlocale(LC_CTYPE, ""); cout.imbue(locale("")); wcout.imbue(locale("")); cout << "cout : 日本語でやっほー" << endl; wcout << L"wcout: 日本語でやっほー" << endl; cout << "cout : 日本語で再びやっほー" << endl; return 0; }
[lugia@lugia-castle ~]$ g++ -o a a.cpp [lugia@lugia-castle ~]$ ./a cout : 日本語でやっほー wcout: ?,?g?;c{?; cout : 日本語で再びやっほー [lugia@lugia-castle ~]$
一方、
#include <iostream> #include <locale> using namespace std; int main() { setlocale(LC_CTYPE, ""); cout.imbue(locale("")); wcout.imbue(locale("")); wcout << L"wcout : 日本語でやっほー" << endl; cout << "cout: 日本語でやっほー" << endl; wcout << L"wcout : 日本語で再びやっほー" << endl; return 0; }
の場合、
[lugia@lugia-castle ~]$ ./a wcout : 日本語でやっほー wcout : 日本語で再びやっほー [lugia@lugia-castle ~]$
文字化けは直りますが、cout の出力がごっそり消えていますねw
とりあえず僕は wcout に統一して出力しています(ぁ
ライブラリコールとかあるのでパフォーマンス的には結構無駄な気もしますが、多分、1000回呼んで影響が出始めるところだと思うので、気にしませんw
ちなみに最初のプログラムを strace してみると、
write(1, "cout : \346\227\245\346\234\254\350\252\236\343\201\247\343\202\204\343\201\243\343\201\273\343\203\274\n"..., 32) = 32 write(1, "wcout: \345,\236g\204c{\374\n"..., 16) = 16 write(1, "cout : \346\227\245\346\234\254\350\252\236\343\201\247\345\206\215\343\201\263\343\202\204\343\201\243\343\201"..., 38) = 38
EUCに変換してる?
glibc のバグ?
それとも C++ としては正常な仕様なのだろうか?