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には以下の問題点があります。
上で挙げた問題を、一つの変換表で全て解決することはできませんが、できるだけ問題が起こりにくくした変換表を以下に示します。
この変換表には、以下のような特徴があります。
この変換表を使用する場合、以下の問題が発生します。
JIS | ここで説明している変換 | CP932 |
---|---|---|
JISX0208 1-29 EM DASH | 2014 EM DASH | 2015 HORIZONTAL BAR |
JISX0208 1-33 WAVE DASH | 301C WAVE DASH | FF5E FULLWIDTH TILDE |
JISX0208 1-34 DOUBLE VERTICAL LINE | 2016 DOUBLE VERTICAL LINE | 2225 PARALLEL TO |
JISX0208 1-61 MINUS SIGN | 2212 MINUS SIGN | FF0D FULLWIDTH HYPHEN-MINUS |
JISX0208 1-81 CENT SIGN | 00A2 CENT SIGN | FFE0 FULLWIDTH CENT SIGN |
JISX0208 1-82 POUND SIGN | 00A3 POUND SIGN | FFE1 FULLWIDTH POUND SIGN |
JISX0208 2-44 NOT SIGN | 00AC NOT SIGN | FFE2 FULLWIDTH NOT SIGN |
未定義領域 | なし | 独自拡張文字 |
JIS | ここで説明している変換 | MacOS日本語変換表 |
---|---|---|
JISX0201 5-12 YEN SIGN | 005C REVERSE SOLIDUS | 00A5 YEN SIGN |
JISX0208 1-17 OVERLINE | FFE3 FULLWIDTH MACRON | 203E OVERLINE |
JISX0208 1-36 HORIZONTAL ELLIPSIS | 2026 HORIZONTAL ELLIPSIS | 22EF MIDLINE HORIZONTAL ELLIPSIS |
未定義領域 | なし | 独自拡張文字 |
JIS | ここで説明している変換 | MacOS日本語変換表 |
---|---|---|
JISX0201 5-12 YEN SIGN | 005C REVERSE SOLIDUS | 00A5 YEN SIGN |
未定義領域 | なし | 独自拡張文字 |
Sun Java実行環境で、文字エンコーディングとして"SJIS","EUC_JP","ISO2022JP"を指定したときの変換表との相違を示します。
JIS | ここで説明している変換 | Sun Java実行環境の変換 |
---|---|---|
JISX0208 1-29 EM DASH | 2014 EM DASH | 2015 HORIZONTAL BAR |
相違はありません。