「SableVMで日本語Encoding(Shift_JIS, Windows-31J)の追加方法」の編集履歴(バックアップ)一覧に戻る

SableVMで日本語Encoding(Shift_JIS, Windows-31J)の追加方法 - (2007/05/30 (水) 19:36:28) のソース

*SableVMで日本語Encoding(Windows-31J)の追加方法

SableVMが使用しているSableVM-Classpath(Sunのrt.jarに相当)にはShift_JIS、Windows-31J、EUC-JPなどの日本語Encodingがデフォルトの状態では利用できません。日本語を利用できる状態にするには幾つかの手段があります。

SableVMで日本語を使うには3段階の選択があります。

:1.UTF-8を使用する|
この場合特に何も考慮する必要はありません。UTF-8はデフォルトの状態で使用可能です。

:2.Shift_JIS、EUC-JPを使用する|
システムに導入されたiconvでサポートされたEncodingを使用します。iconvから使用するEncodingはSableVMのIconvProviderで実装されていて幾つかピックアップしたものが利用可能になります。
このIconvProviderを使用するにはjavaの起動引数で-Dgnu.classpath.nio.charset.provider.iconvを追加します。
例)java -Dgnu.classpath.nio.charset.provider.iconv DisplayCharsets
※iconvでサポートしているCharsetは iconv -l で確認できます。

:3.Windows-31Jを使用する|
iconvでは利用可能ですが、SableVMのIconvProviderがサポートしていないため、java標準のAPIとして用意されているCharsetProviderを使用してWindows-31Jが利用可能になるようにします。用意の方法はJ2SEのAPIリファレンスを参考にしてください。下記の手順を行えば簡単にできます。
Windows-31JのEncoding実装をゼロから行うのは大変なのでGNUライブラリのIconvProvider経由でiconvを利用する方法を取りました。

Shift_JISは、J2SE1.4.2から、ある記号(~, ∥, -, ¢, £, ¬など)のコードポイントが変更になり文字化けが発生する可能性が高くなりました。特に~は良く使うのでこれに対応するにはWindows-31Jを使用する必要があります。なので、ここでは3段階目のWindows-31Jを利用可能にするための手順を残します。


Tomcat4を起動している場合は手順実施後に再起動が必要です。

>KUROBOX-PRO:~# /usr/lib/sablevm/jre/lib
>KUROBOX-PRO:/usr/lib/sablevm/jre/lib# mkdir ext
>KUROBOX-PRO:/usr/lib/sablevm/jre/lib# cd ext
>KUROBOX-PRO:/usr/lib/sablevm/jre/lib/ext# wget http://osdn.dl.sourceforge.jp/jeextension/25616/gnu-charset-ja-jp_1.0.0.jar
>KUROBOX-PRO:/usr/lib/sablevm/jre/lib/ext# ls -l
>total 12
>-rw-r--r-- 1 root root 10887 2007-05-30 17:54 gnu-charset-ja-jp_1.0.0.jar

※なぜか/usr/lib/fjsdk/jre/lib/extの指す/usr/lib/sablevm/jre/lib/extがないため、extを作成してからwgetでCharsetProviderをダウンロードします。

試しにサンプルプログラムで有効なCharsetをすべて表示してみます。
> KUROBOX-PRO:~# vi DisplayCharsets.java
> public class DisplayCharsets {
>     public static void main(String[] args) {
>         java.util.Map map = java.nio.charset.Charset.availableCharsets();
>         java.util.Iterator enum = map.keySet().iterator();
>         while (enum.hasNext()) {
>             String key = (String) enum.next();
>             java.nio.charset.Charset val = (java.nio.charset.Charset) map.get(key);
>             System.out.println(key + "=" + val.aliases());
>         }
>     }
> }
> KUROBOX-PRO:~# javac DisplayCharsets.java
> KUROBOX-PRO:~# java DisplayCharsets

Shift_JIS、EUC-JP、Windows-31Jが表示されていれば成功です。

----
最終更新日:&date()