日本語のUnicodeベンダ依存文字表

  1. JIS版
  2. Shift-JIS版 (表のみ)
  3. UTF-8版 (表のみ)

なお、UTF-8版ではUnicodeの特定のコードポイントを直接指定しますので、たとえば、Win32用のInternet Explorerなどでは、文字が正しく見えないかもしれません。 それがここで指摘している問題でもあります。


この表は、JavaHouse-Brewersメーリングリストに投稿された、Windows 95/NT環境でJavaプログラムを使うと一部の文字が表示されないという話題についてまとめたものです。

これは、次の事柄が原因でした。

  1. 従来採用していたShift-JISコードを、どのようにUnicodeにマップするかについては、ベンダ依存である。
  2. JIS X0221の付属書3「JIS X 0201, JIS X 0208及びJIS X 0212の表内文字との対応」で、マッピングを定義している。 しかし、これは参考であり強制力を持たない。
  3. Unicodeにおいても、使用するフォントやソーティングのためにつかうデータは言語によって異なるために、通常のUnicodeベースの地域化プログラムは、Unicodeすべての文字に対してではなく、その一部に対してのデータしか持たない。 現在、各ベンダは自分が使用している文字しか配慮しないために、他のベンダがマッピングしたUnicodeデータを渡されると、正しく処理できない。

日本語のUnicodeベンダ依存文字表
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 <[email protected]>, Toshihiro Nishimura <[email protected]>, Yoshiyuki Yamaguchi <[email protected]>, Sakita Takumi <[email protected]>, Katsuhiro Mihara <[email protected]>.


各ベンダの対策


MicrosoftのShift-JISとUnicode間の変換問題

これは上記の問題とは違いますが、マイクロソフト株式会社のサポートページに、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コンバータに変更を加えるそうです。


参考資料

  1. The Unicode Consortium: The Unicode Standard, Version 2.0, Addison Wesley, 1996.
  2. 日本工業標準調査会: 国際符合化文字集合(UCS) - 第一部 体系及び基本多言語面 JIS X 0221-1995 (ISO/IEC 10646-1:1993)
  3. Glenn Adams, John H. Jenkins: Shift-JIS to Unicode (version 0.9), Unicode 1.1 & 2.0.
  4. Lori Brownell, K.D. Chang: cp932_ShiftJIS to Unicode table (version 2.0), Unicode 2.0.
  5. Peter Edberg: MacOS_Japanese [to Unicode] (version 0.2), Unicode 1.1 & 2.0.
  6. TOG/JVC CDE/Motif技術検討WG: Unicodeとユーザ定義文字・ベンダ定義文字に関する問題点と解決策

Kazuhiro Kazama (Ingrid Project)