なお、UTF-8版ではUnicodeの特定のコードポイントを直接指定しますので、たとえば、Win32用のInternet Explorerなどでは、文字が正しく見えないかもしれません。 それがここで指摘している問題でもあります。
この表は、JavaHouse-Brewersメーリングリストに投稿された、Windows 95/NT環境でJavaプログラムを使うと一部の文字が表示されないという話題についてまとめたものです。
これは、次の事柄が原因でした。
| ISO/IEC 646 | Shift-JIS | JIS X 0221 (JIS X 0201) | JIS X 0221 (ISO/IEC 646-IRV) | Unicode Consortium | Java (SJIS & EUCJIS) | Java (JIS) | Windows 95/NT | MacOS |
|---|---|---|---|---|---|---|---|---|
| \ (D/12, REVERSE SOLIDUS) | 0x5C | - | U+005C (REVERSE SOLIDUS) | - | - | U+005C (REVERSE SOLIDUS) | - | - |
| ~ (F/14, TILDE) | 0x7E | - | U+007E (TILDE) | - | - | U+007E (TILDE) | - | - |
| JIS X 0201 | Shift-JIS | JIS X 0221 (JIS X 0201) | JIS X 0221 (ISO/IEC 646-IRV) | Unicode Consortium | Java (SJIS & EUCJIS) | Java (JIS) | Windows 95/NT | MacOS |
| \ (D/12, YEN SIGN) | 0x5C | U+00A5 (YEN SIGN) | - | U+00A5 (YEN SIGN) | U+005C (REVERSE SOLIDUS) | U+00A5 (YEN SIGN) | U+005C (REVERSE SOLIDUS) | U+00A5 (YEN SIGN) |
| ~ (F/14, OVERLINE) | 0x7E | U+203E (OVERLINE) | - | U+203E (OVERLINE) | U+007E (TILDE) | U+203E (OVERLINE) | U+007E (TILDE) | U+007E (TILDE) |
| JIS X 0208 | Shift-JIS | JIS X 0221 (JIS X 0201) | JIS X 0221 (ISO/IEC 646-IRV) | Unicode Consortium | Java (SJIS & EUCJIS) | Java (JIS) | Windows 95/NT | MacOS |
|  ̄ (1-17, OVERLINE) | 0x8150 | U+FFE3 (FULLWIDTH MACRON) | U+203E (OVERLINE) | U+FFE3 (FULLWIDTH MACRON) | U+FFE3 (FULLWIDTH MACRON) | U+FFE3 (FULLWIDTH MACRON) | U+FFE3 (FULLWIDTH MACRON) | U+203E (OVERLINE) |
| ― (1-29, EM DASH) | 0x815C | U+2014 (EM DASH) | U+2014 (EM DASH) | U+2015 (HORIZONTAL BAR) | U+2015 (HORIZONTAL BAR) | U+2015 (HORIZONTAL BAR) | U+2015 (HORIZONTAL BAR) | U+2014 (EM DASH) |
| \ (1-32, REVERSE SOLIDUS) | 0x815F | U+005C (REVERSE SOLIDUS) | U+FF3C (FULLWIDTH REVERSE SOLIDUS) | U+005C (REVERSE SOLIDUS) | U+FF3C (FULLWIDTH REVERSE SOLIDUS) | U+FF3C (FULLWIDTH REVERSE SOLIDUS) | U+FF3C (FULLWIDTH REVERSE SOLIDUS) | U+FF3C (FULLWIDTH REVERSE SOLIDUS) |
| 〜 (1-33, WAVE DASH) | 0x8160 | U+301C (WAVE DASH) | U+301C (WAVE DASH) | U+301C (WAVE DASH) | U+301C (WAVE DASH) | U+301C (WAVE DASH) | U+FF5E (FULLWIDTH TILDE) | U+301C (WAVE DASH) |
| ‖ (1-34, DOUBLE VERTICAL LINE) | 0x8161 | U+2016 (DOUBLE VERTICAL LINE) | U+2016 (DOUBLE VERTICAL LINE) | U+2016 (DOUBLE VERTICAL LINE) | U+2016 (DOUBLE VERTICAL LINE) | U+2016 (DOUBLE VERTICAL LINE) | U+2225 (PARALLEL TO) | U+2016 (DOUBLE VERTICAL LINE) |
| … (1-36, HORIZONTAL ELLIPSIS) | 0x8163 | U+2026 (HORIZONTAL ELLIPSIS) | U+2026 (HORIZONTAL ELLIPSIS) | U+2026 (HORIZONTAL ELLIPSIS) | U+2026 (HORIZONTAL ELLIPSIS) | U+2026 (HORIZONTAL ELLIPSIS) | U+2026 (HORIZONTAL ELLIPSIS) | U+22EF (MIDLINE HORIZONTAL ELLIPSIS) |
| − (1-61, MINUS SIGN) | 0x817C | U+2212 (MINUS SIGN) | U+2212 (MINUS SIGN) | U+2212 (MINUS SIGN) | U+2212 (MINUS SIGN) | U+2212 (MINUS SIGN) | U+FF0D (FULLWIDTH HYPHEN-MINUS) | U+2212 (MINUS SIGN) |
| ¥ (1-79, YEN SIGN) | 0x818F | U+FFE5 (FULLWIDTH YEN SIGN) | U+00A5 (YEN SIGN) | U+FFE5 (FULLWIDTH YEN SIGN) | U+FFE5 (FULLWIDTH YEN SIGN) | U+FFE5 (FULLWIDTH YEN SIGN) | U+FFE5 (FULLWIDTH YEN SIGN) | U+FFE5 (FULLWIDTH YEN SIGN) |
| ¢ (1-81, CENT SIGN) | 0x8191 | U+00A2 (CENT SIGN) | U+00A2 (CENT SIGN) | U+00A2 (CENT SIGN) | U+00A2 (CENT SIGN) | U+00A2 (CENT SIGN) | U+FFE0 (FULLWIDTH CENT SIGN) | U+00A2 (CENT SIGN) |
| £ (1-82, POUND SIGN) | 0x8192 | U+00A3 (POUND SIGN) | U+00A3 (POUND SIGN) | U+00A3 (POUND SIGN) | U+00A3 (POUND SIGN) | U+00A3 (POUND SIGN) | U+FFE1 (FULLWIDTH POUND SIGN) | U+00A3 (POUND SIGN) |
| ¬ (2-44, NOT SIGN) | 0x81CA | U+00AC (NOT SIGN) | U+00AC (NOT SIGN) | U+00AC (NOT SIGN) | U+00AC (NOT SIGN) | U+00AC (NOT SIGN) | U+FFE2 (FULLWIDTH NOT SIGN) | U+00AC (NOT SIGN) |
| JIS X 0212 | Shift-JIS | JIS X 0221 (JIS X 0201) | JIS X 0221 (ISO/IEC 646-IRV) | Unicode Consortium | Java (SJIS & EUCJIS) | Java (JIS) | Windows 95/NT | MacOS |
| (2-23, TILDE) | - | U+007E (TILDE) | U+FF5E (FULL WIDTH TILDE) | - | - | - | - | - |
Special thanks to Lori Brownell <loribr@microsoft.com>, Toshihiro Nishimura <nishi@jd.cs.fujitsu.co.jp>, Yoshiyuki Yamaguchi <yama@kanto-ele.co.jp>, Sakita Takumi <sakita@ffc.newton.co.jp>, Katsuhiro Mihara <mihara@is.titech.ac.jp>.
これは上記の問題とは違いますが、マイクロソフト株式会社のサポートページに、MicrosoftにおけるShift-JIS<->Unicodeの別の変換問題についての説明が追加されています。
簡単に説明すれば、Microsoftでは、一つの変換テーブルしか用意していませんが、NEC拡張文字セットに対応するために、Shift-JISからUnicodeへの変換テーブルが多対一になっています。 しかし、UnicodeからShift-JISへの変換テーブルは一対一なので、一度データを読み込んでしまうと、厳密に元に戻すことはできない場合があるのです。
Windows版では「&」を正しく出力することができませんが、これはバグのようです。 JDCのBug ParadeでBud Id 4079057を見てください。 JDK 1.1.6と1.2でSJISコンバータに変更を加えるそうです。