Javaアプレットとサーブレットを作っていて、日本語文字、エンコーディング関連でつまずいたが何とか解決したことを記録する。
ここに書くものは、1つの成功例であって、最善の方法であるとは限らない。
Applet-servlet間の通信は通常HTTPで行うことになるので、appletからはjava.net.URLConnectionを使うとする。
Servlet側では、javax.servlet.HttpServletResponse#setContentType()でエンコーディングを指定する。
例:
public void doGet(HttpServletRequest req, HttpServletResponse res){Applet側では、InputStreamReaderを使って、送られてきた文字列を読み出す。InputStreamReaderの作成時にエンコーディングを指定する。
res.setContentType("text/html; charset=utf-8");
例:
URL url = new URL("http://...");
URLConnection uc = url.openConnection();
InputStreamReader isr = new InputStreamReader(uc.getInputStream(), "utf-8");
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
●ソースコードへの日本語文字の記述
Swingのラベルや標準出力への出力文字列など、プログラムが表示する日本語文字をソースコードに直接埋め込む場合は、javacコマンドでコンパイルする時に、ソースコードで使用しているコーディングの名前を-encodingオプションで指定する。
例:
javac -encoding EUC-JP eucfile.javaコーディング名は、日本語だと"EUC-JP","ISO-2022-JP","UTF-8","Shift_JIS"などがある。
(参考:encoding.doc) ●APIからの日本語文字の取得
JDBC等のAPIがJava内部で使用するものでないコーディングで文字コードを返す場合は、文字コードの変換が必要になる。Stringクラスのコンストラクタを使うとJavaのコーディングに変換できる。
例:
ResultSet rs;
String jstr = new String(rs.getBytes(1), "euc-jp");
●LinuxでJavaアプレットを表示すると日本語フォントが出ない(□になる)場合の対処
Mozilla上のJavaアプレットの表示がそうなるのも、appletviewerでそうなるのも共通の原因で、JREに適切にフォントパスを設定すると解決すると思われる。
JREのインストールディレクトリのlib/fonts/の下にfallbackというディレクトリを作成し、日本語を含むフォントファイルへのシンボリックリンクを置く。
例:
cd /usr/java/jdk1.5.0_07/jre/lib/fonts(参考:JavaSE 5.0のリリースノート (日本語)(English))
mkdir fallback
ln -s /usr/share/fonts/ja/TrueType/kochi-gothic.ttf fallback/
ln -s /usr/share/fonts/ja/TrueType/kochi-mincho.ttf fallback/
コメント