アプリケーションでは、文字列を扱う場合に内部でUnicodeを用いることが一般的に行われています。ファイルとして保存する場合や、ネットワークを通す場合には、ISO-2022-JP・EUC-JP・シフトJISが使われるため、入出力の段階で変換する必要があります。特定のプラットフォームを対象としたアプリケーションの場合は、プラットフォームの変換モジュールを利用できますが、クロスプラットフォームのアプリケーションのために、言語処理系やアプリケーション自身が、Unicodeと既存のエンコーディングとの変換モジュールを持つことが多くなっています。文字集合を元にしていますが、これらの文字集合とUnicodeとの対応は、規格として厳密には定まっていないため、実装ごとに変換表が違っています。変換モジュールを実装するときには、どの変換表を使うべきかが問題になります。変換表の違いには2種類あります。1つ目は、独自拡張文字のように、JIS側のエンコーディングのバリエーションによる違いです。この種の違いは、文字エンコーディングが異なるものとして対処ができます。シフトJISには、Shift_JISやWindows-31Jなどの種類があり、Windows-31JはShift_JISに文字を追加した別のエンコーディングと見なすことができます。2つ目は、Unicode側のバリエーションによる違いです。U+301CとするかU+FF5Eとするかの違いが挙げられます。以下では、主にこの2つ目の違いによる問題と対処方法について述べます。Consortiumで配布されているJIS0201.TXT,JIS0208.TXT,SHIFTJIS.TXTがあります。この変換表は、規格ではなく、最適なものでもないという注意書きがされた上、OBSOLETEとされていますが、実装のときに使われることがあります。この変換表には以下のような問題点があります。代わりに用いられているため、システムが正常に動作しなくなります。変換しますが、プログラミング言語などで予想外の解釈をされてしまうことがあります。区別がつかなくなります。既存のシステムと異なる変換をするため、相互運用で問題が起こることがあります。この変換表に従って変換したUnicode文字をWindowsで表示しようとすると、意図したものと異なる字形が表示されることがあります。別の変換表として、MicrosoftのCP932があります。CP932は、Windowsの日本語エンコーディングとして使われているため、WindowsではCP932に従って変換するのが、最も安全です。CP932には以下の問題点があります。変換するため、この変換を前提とした日本語用フォントを使わない限り、円記号として表示されません。シフトJISを前提とした変換表のため、ISO-2022-JPやEUC-JPとの変換が明確ではありません。Windows以外のプラットフォームでは、システムの変換と異なるため、相互運用で問題が起こることがあります。変換するなど、文字の意味として適切でない変換があります。上で挙げた問題を、一つの変換表で全て解決することはできませんが、できるだけ問題が起こりにくくした変換表を以下に示します。変換表(.tar.gz)変換規則(HTML)この変換表には、以下のような特徴があります。Java実行環境1.4.0以降の変換と全く同じため、「また勝手な変換表が増えた」と陰口をたたかれずに済みます。us-asciiと同じコードの部分はus-asciiと同じ変換をするため、プログラミング言語などの誤作動を防ぎます。機種依存文字を除いて、Macintoshの最新の変換と等しいため、Macintoshでのトラブルが最も少なく済みます。JISの文字名称をもとにしていて、文字の意味として自然な変換をします。この変換表を使用する場合、以下の問題が発生します。変換するため、この変換を前提とした日本語用フォントを使わない限り、円記号として表示されません。Windowsなど、既存のシステムと異なる変換をする場合があり、相互運用で問題が起こることがあります。推奨する利用方法Windows専用ソフトウェアで、ISO-2022-JPやEUC-JPを厳密に扱う必要がなければ、内部に変換表を持たず、Windowsの変換APIを使うのが好ましいです。Macintosh専用ソフトウェアで、ISO-2022-JPやEUC-JPを厳密に扱う必要がなければ、同様に内部に変換表を持たないのが好ましいです。使用するプログラミング言語が変換をサポートしている場合は、内部に変換表を持たずに言語の変換機能を使うのが好ましいです。必要に応じて、プラットフォームによって使用する変換表を変えるのが良いかもしれません。(Windowsでは"MS932"、それ以外では"SJIS"にするなど)Windowsでは使われないソフトウェアの場合は、ここで説明している変換表を用いるのが好ましいです。Windowsで作成されたUnicode文書を扱う場合のために、Unicodeから既存のエンコーディングに変換する場合に多対一変換をすれば、トラブルが少なくなります。クロスプラットフォームのアプリケーションで、様々なエンコーディングを使う必要がある場合は、ここで説明している変換表とCP932の両方を用意して、プラットフォームによって切り替えると、トラブルが少なくなります。クロスプラットフォームの言語処理系では、ここで説明している変換表とCP932の両方を用意すると良いかもしれません。Java実行環境で、文字エンコーディングとして"SJIS","EUC_JP","ISO2022JP"を指定したときの変換表との相違を示します。JIS-Unicode間の変換表の選択について市岡。