Japanese Code in Java

Java における日本語コード

(Java, UNICODE and Utf-8)
Copyright (c) 1998-1999 by Hirofumi Fujii
(Date: 09-Feb-1998, LastUpdate: 06-Aug-1999)

:この文章は、筆者が Java Virtual Machine Specification を調べた情報、及び テストプログラムを使って調べた情報等を基にしていますが、筆者の 理解不足による誤解、誤読、また、その後の specification の変更 などがあるかも知れません。必ずしも正確では無いことをご承知おき 下さい。

Java Virtual machine において、一般に文字列定数は constant pool に 置かれる。java.lang.string 型の constant object は、この constat pool に置かれた文字列を参照する。constant pool 中では、文字列は Utf8 形式で格納されている。Utf8 形式は任意の長さの ビット列を可変長で格納する形式である(ただし Java では Utf8 を制約のある形で使っている)らしいが、筆者は正式の規格は見た ことがないので[注1]、 Java Virtual machine に書かれた記述を基に述べる。

Java では日本語文字列に限らず、文字列は Unicode (UCS-2) で扱われる。 従って、class file (の constant pool)中に格納されている 文字列は Unicode である。Unicode (UCS-2) は 2octets-1byte の文字 コードであるので、これをそのままファイルに格納したり 通信システムへ流すと、次の問題を生じる。

これらの問題を避けるために、Java では Unicode (UCS-2) を Utf8 形式 で格納している。


Utf8 形式

先に述べたように、筆者は Utf8 の正式な規格を 知らない[注1]。ここに述べて いるのは、Java Virtual Machine Specification に記述されている情報を 基にしている。

さて、Unicode (UCS-2) は 2octets 1byte コードである。これを従来の 文字コード(図形文字コード、制御文字コード)系と衝突しないように、 次のように Unicode を変換する。


UTF-8 の規格について(06-Aug-1999)

その後、UTF-8 の規格について判明したことを記載しておく。
UTF-8 は、

この規格と、上に述べた方法(Javaでの表現)との 違いは Unicode の 0x0000 の扱いだけのようである。