Windowsでソースコードを書くと、デフォルトではShift_JISで保存される。しかし、Linuxのデフォルトの文字コードはShift_JISではなく、EUCであるので文字化けが起こる。
JAVA仮想マシンでは、unicodeが使われているのだが、これは、コンパイル時に変換している(と思う。
つまり、windows上でjavacを行うと、コンパイラが「windowsだからきっとソースはShift_JISで書いているんだな」と自動で判断してくれる。
同様に、Linux上でjavacを行うと、コンパイラが「LinuxだからきっとソースはEUCで書いているんだな」と自動で判断してくれる。
だが、windows上で作成したソースをLinux上でコンパイルしようとすると、勘違いが起こり、文字化けしてしまう。
単純に文字化けするならいいのだが、/*や""と日本語が連続になっていると、一緒に化けてしまい、コメントアウトなどすらうまくいかないようだ。
これを改善する方法は、2つ (だけ思いついたぞ!)
1つ目が、文字コードをEUCに変換する方法。
shellでnkfコマンドを用い
とすればよい。ここで、変換前と変換後のファイルで同じパスを指定すると、中身が消えるので、上書きの場合は、
また、eucに変換する時は-eだが、utf-8に変換する時は-uではなく-wなので注意
2つ目が、コンパイラに、LinuxだけどShift_JISだよと教えてあげる方法。
javacコマンドに-encodingオプションをつければよい
<追記>
2008/4/5
nkfの--overwrite、-wオプションを追記
JAVA仮想マシンでは、unicodeが使われているのだが、これは、コンパイル時に変換している(と思う。
つまり、windows上でjavacを行うと、コンパイラが「windowsだからきっとソースはShift_JISで書いているんだな」と自動で判断してくれる。
同様に、Linux上でjavacを行うと、コンパイラが「LinuxだからきっとソースはEUCで書いているんだな」と自動で判断してくれる。
だが、windows上で作成したソースをLinux上でコンパイルしようとすると、勘違いが起こり、文字化けしてしまう。
単純に文字化けするならいいのだが、/*や""と日本語が連続になっていると、一緒に化けてしまい、コメントアウトなどすらうまくいかないようだ。
これを改善する方法は、2つ (だけ思いついたぞ!)
1つ目が、文字コードをEUCに変換する方法。
shellでnkfコマンドを用い
nkf -e 変換したいファイル名 > 変換後のファイル名
とすればよい。ここで、変換前と変換後のファイルで同じパスを指定すると、中身が消えるので、上書きの場合は、
nkf --overwrite -e 変換したいファイル名と--overwriteオプションをつけてやる。
また、eucに変換する時は-eだが、utf-8に変換する時は-uではなく-wなので注意
2つ目が、コンパイラに、LinuxだけどShift_JISだよと教えてあげる方法。
javacコマンドに-encodingオプションをつければよい
javac -encoding SJIS コンパイルしたいファイル
<追記>
2008/4/5
nkfの--overwrite、-wオプションを追記

コメントする