2009年2月28日土曜日

linuxのlocale設定メモ

イマイチLinuxについて分からないことが多いです。
例えばjavaで
public static void main(String[] args) {
System.out.println("ほげ");
}
と、EUC-JPで作成した場合に

1)まず、コンパイルで怒られた。
# javac Hoge.java
「コラー!!"??????"ってなんじゃー!?ASCIIコードマッピングにないでー!怒」
みたいな感じで。

2)だから、コンパイルにエンコードオプションをつける
# javac -encoding euc-jp Hoge.java
するとコンパイルできる。

3)じゃあ実行してみる。予想では標準出力(僕のテスト環境ではコンソール画面)に「ほげ」と出る予定。
しかし、出ない。というか文字化け(?)
# java Hoge
4)なんでだろぅ?と熟考したところ、あ!そういえば環境変数LANG=Cにしてたわ!ということで、LANG=ja_JP.euc_JPに!!

5)ところが僕のテストサーバー(ubuntu)は、ja_JP.euc_JPがないみたい、、、。UTF8しかない。
# locale -a | grep ja
ja_JP.utf8
6)ココらへんからだいぶ曖昧ですが、LANG=に存在しないロケール情報を登録してもLinux側で設定してくれないみたい?
# export LANG=foobartestest (←ありえないロケール)
# echo $LANG
foobartesttest
となるが、実際はデフォルトの(僕の場合はC)LANGで表示される。

7)という事で、ubuntuにEUC-JPとついでにSJISを入れてあげる。
# localedef -i ja_JP -f EUC-JP ja_JP.eucJP
# localedef -i ja_JP -f SJIS ja_JP.sjis
# locale -a | grep ja
ja_JP.eucjp
ja_JP.sjis
ja_JP.utf8
入った!

8)では、Linuxコンソールの文字コードをeucjpにして、もう一度
# java Hoge
ほげ
出た!!!!

とりあえず、そんな上記のような感じでjavaで日本語表示できました。

まー本来の目的はjavaで日本語表示することではなかったのですが、とりあえずLinuxの言語設定に関して少し知識が増えたかな?という感じでした。

0 件のコメント: