« JDBC+servlet連携appletを作ってみた | メイン | MySQLと日本語文字 »

 Javaと日本語文字

Javaアプレットとサーブレットを作っていて、日本語文字、エンコーディング関連でつまずいたが何とか解決したことを記録する。
ここに書くものは、1つの成功例であって、最善の方法であるとは限らない。

●Servletからappletへの日本語文字列の受け渡し
Applet-servlet間の通信は通常HTTPで行うことになるので、appletからはjava.net.URLConnectionを使うとする。
Servlet側では、javax.servlet.HttpServletResponse#setContentType()でエンコーディングを指定する。
例:

public void doGet(HttpServletRequest req, HttpServletResponse res){
res.setContentType("text/html; charset=utf-8");

Applet側では、InputStreamReaderを使って、送られてきた文字列を読み出す。InputStreamReaderの作成時にエンコーディングを指定する。
例:
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
mkdir fallback
ln -s /usr/share/fonts/ja/TrueType/kochi-gothic.ttf fallback/
ln -s /usr/share/fonts/ja/TrueType/kochi-mincho.ttf fallback/

(参考:JavaSE 5.0のリリースノート (日本語)(English)

トラックバック

このエントリーのトラックバックURL:
http://ynomura.dip.jp/cgi-bin/mt/mt-tb.cgi/76

コメント投稿フォーム

※投稿されたコメントはオーナーが承認するまで表示されません。


Powered by Movable Type 3.35