JIS-Unicode間の変換表の選択について


更新:
2004年11月20日文書名を変更 本文を若干修正
2003年1月25日公開

背景

多言語対応アプリケーションでは、文字列を扱う場合に内部でUnicodeを用いることが一般的に行われています。しかし、ファイルとして保存する場合や、ネットワークを通す場合には、ISO-2022-JP・EUC-JP・シフトJISが使われるため、入出力の段階で変換する必要があります。特定のプラットフォームを対象としたアプリケーションの場合は、プラットフォームの変換モジュールを利用できますが、クロスプラットフォームのアプリケーションのために、言語処理系やアプリケーション自身が、Unicodeと既存のエンコーディングとの変換モジュールを持つことが多くなっています。

シフトJISなどのエンコーディングは、 JIS X 0201 や JIS X 0208 などの文字集合を元にしていますが、これらの文字集合とUnicodeとの対応は、規格として厳密には定まっていないため、実装ごとに変換表が違っています。変換モジュールを実装するときには、どの変換表を使うべきかが問題になります。

変換表の違いには2種類あります。1つ目は、独自拡張文字のように、JIS側のエンコーディングのバリエーションによる違いです。この種の違いは、文字エンコーディングが異なるものとして対処ができます。例えば、シフトJISには、Shift_JISやWindows-31Jなどの種類があり、Windows-31JはShift_JISに文字を追加した別のエンコーディングと見なすことができます。2つ目は、Unicode側のバリエーションによる違いです。例えば、JIS X 0208 の WAVE DASH をU+301CとするかU+FF5Eとするかの違いが挙げられます。以下では、主にこの2つ目の違いによる問題と対処方法について述べます。

変換表の一つに、Unicode Consortiumで配布されているJIS0201.TXT,JIS0208.TXT,SHIFTJIS.TXTがあります。この変換表は、規格ではなく、最適なものでもないという注意書きがされた上、OBSOLETEとされていますが、実装のときに使われることがあります。しかし、この変換表には以下のような問題点があります。

別の変換表として、MicrosoftのCP932があります。CP932は、Windowsの日本語エンコーディングとして使われているため、WindowsではCP932に従って変換するのが、最も安全です。しかし、CP932には以下の問題点があります。

推奨する変換表

上で挙げた問題を、一つの変換表で全て解決することはできませんが、できるだけ問題が起こりにくくした変換表を以下に示します。

変換表(.tar.gz)
変換規則(HTML)

この変換表には、以下のような特徴があります。

この変換表を使用する場合、以下の問題が発生します。

推奨する利用方法

他の変換表との相違

Microsoft CP932との相違

JISここで説明している変換CP932
JISX0208 1-29 EM DASH2014 EM DASH2015 HORIZONTAL BAR
JISX0208 1-33 WAVE DASH301C WAVE DASHFF5E FULLWIDTH TILDE
JISX0208 1-34 DOUBLE VERTICAL LINE2016 DOUBLE VERTICAL LINE2225 PARALLEL TO
JISX0208 1-61 MINUS SIGN2212 MINUS SIGNFF0D FULLWIDTH HYPHEN-MINUS
JISX0208 1-81 CENT SIGN00A2 CENT SIGNFFE0 FULLWIDTH CENT SIGN
JISX0208 1-82 POUND SIGN00A3 POUND SIGNFFE1 FULLWIDTH POUND SIGN
JISX0208 2-44 NOT SIGN00AC NOT SIGNFFE2 FULLWIDTH NOT SIGN
未定義領域なし独自拡張文字

Mac OS 日本語エンコーディング変換表との相違

1998年8月18日版(b02)変換表

JISここで説明している変換MacOS日本語変換表
JISX0201 5-12 YEN SIGN005C REVERSE SOLIDUS00A5 YEN SIGN
JISX0208 1-17 OVERLINEFFE3 FULLWIDTH MACRON203E OVERLINE
JISX0208 1-36 HORIZONTAL ELLIPSIS2026 HORIZONTAL ELLIPSIS22EF MIDLINE HORIZONTAL ELLIPSIS
未定義領域なし独自拡張文字

1999年9月22日版(b03)変換表

JISここで説明している変換MacOS日本語変換表
JISX0201 5-12 YEN SIGN005C REVERSE SOLIDUS00A5 YEN SIGN
未定義領域なし独自拡張文字

Sun Java実行環境の変換との相違

Sun Java実行環境で、文字エンコーディングとして"SJIS","EUC_JP","ISO2022JP"を指定したときの変換表との相違を示します。

JRE1.1.7〜1.3.1の変換

JISここで説明している変換Sun Java実行環境の変換
JISX0208 1-29 EM DASH2014 EM DASH2015 HORIZONTAL BAR

JRE1.4.0以降の変換

相違はありません。



市岡 耕平