Skip to content

MS_JISCharacterCode

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

JIS文字・漢字コード

概要

日本の文字コード(JIS 文字・漢字コード)について纏める。

  • Windows で、Shift-JIS(文字コード)で表現できる範囲は、
    JIS X 0208(キャラクタ セット)までの範囲である。

  • それ以上のキャラクタ セット(JIS X 0212 ~)は、
    Unicode(文字コード)でのみサポートされる文字が混じる。

  • GT 書体などの文字セットには、Unicode にも無い文字が含まれる。

  • [参考] : GT書体 – Wikipedia
    https://ja.wikipedia.org/wiki/GT%E6%9B%B8%E4%BD%93

補足(規格が多い理由): JIS の文字コード規格は
番号と通称が入り乱れるため混乱しやすい。
1 枚の図にすると整理できる

【文字集合(どの文字を含むか)】

   JIS X 0201  … 英数字・カナ(1 バイト)      ANK
        │
   JIS X 0208  … 第1・第2水準漢字(6,879 字)  ★ Shift_JIS の範囲
        ├──── JIS X 0212 … 補助漢字(第3水準の一部)
        │                     ※ Shift_JIS では表せない
        └──── JIS X 0213 … 第1~第4水準(11,233 字)
                              ├ :2000 → JIS2000
                              └ :2004 → JIS2004 ★

   JIS X 0221  … ISO/IEC 10646(=Unicode)の JIS 版

【符号化方式(どうバイトにするか)】
   Shift_JIS / CP932 / EUC-JP / ISO-2022-JP / UTF-8 / UTF-16

重要な関係:

含む文字集合
Shift_JIS(素) JIS X 0201 + JIS X 0208
CP932(Windows-31J) 上記 + NEC/IBM 拡張文字エンコーディング
Shift_JIS-2004 JIS X 0201 + JIS X 0213Windows は非対応
UTF-8 / UTF-16 Unicode 全体(JIS X 0213 を包含)

原文の要点——「JIS X 0212 以降は Unicode でしか扱えない」——は
正確
である。
Windows が採用したのは CP932 であり、
Shift_JIS-2004 は実装されていない
したがって、JIS2004 の文字を扱いたければ Unicode を使うしかない

**「GT 書体には Unicode にも無い文字がある」**という指摘も重要で、
Unicode は「すべての文字」を収録しているわけではない
(収録は継続中)。
現在は **IVS(異体字セレクタ)**で異体字を区別できるようになったが、
未収録の字は依然として外字で対処するしかない
Windowsの外字)。

JISコード

補足(ISO-2022-JP の性質): 「JIS コード」と俗称されるこの方式は、
エスケープ シーケンスで文字集合を切り替えるという、
他とは異質な仕組みを持つ。

【ISO-2022-JP の構造】
   ESC ( B    → 以降は ASCII
   ESC $ B    → 以降は JIS X 0208(2 バイト)
   ESC ( J    → 以降は JIS X 0201 ラテン

   例: "あA" は
        ESC $ B  24 22   ESC ( B  41
        └─ 切替 ─┘ あ    └─ 切替 ─┘ A

**これは「状態を持つ符号化方式」**であり、以下の問題を生む。

・途中から読むと、どの文字集合か分からない
・文字列の連結・切り出しで【エスケープが壊れる】
・grep などのバイト単位の処理と相性が悪い
・7 ビットに収まるのが唯一の利点(当時のメールの制約)

現在使われるのは、古いメール システムとの互換だけである。
メールも現在は UTF-8 が主流であり、
新規で ISO-2022-JP を選ぶ理由はない

**「JIS X 0201 の片仮名(半角カナ)が使えない」**という制約も重要で、
ISO-2022-JP のメールに半角カナを入れると化ける
——これが「メールで半角カナを使うな」と言われた歴史的理由である
(現在は UTF-8 なら問題ない)。

.NET で扱うには、コードページ 50220 / 50221 / 50222 を使う
(プロバイダー登録が必要——エンコーディング)。

JIS文字コード

  • JIS X 0201
    https://ja.wikipedia.org/wiki/JIS_X_0201
    • JIS X 0208 には JIS X 0201 にあるほぼすべての文字がある・重複する。
    • JIS X 0211 (ISO/IEC 6429) で規定される制御文字集合と組み合わせて使用する。
    • 通称:ANK コード
    • 旧規格番号は JIS C 6220。

補足(JIS X 0201 が「半角カナ」の出所): この規格が定めるのは
1 バイトで表す英数字・記号・カタカナである。

0x20~0x7E … ASCII とほぼ同じ(ただし 2 箇所違う ★)
0xA1~0xDF … 【カタカナ】(いわゆる半角カナ)

★ ASCII との相違——これが今も事故を起こす。

コード ASCII JIS X 0201
0x5C \(バックスラッシュ) ¥(円記号)
0x7E ~(チルダ) (オーバーライン)
【日本語 Windows でパス区切りが ¥ に見える理由】
   内部的には 0x5C(バックスラッシュ)
   日本語フォントが 0x5C を「¥」の字形で描く
     → 同じ文字。表示だけが違う

【現在の問題】
   Unicode では別の文字になった
     U+005C  \  REVERSE SOLIDUS   ← パス区切り
     U+00A5  ¥  YEN SIGN          ← 円記号(半角)
     U+FFE5  ¥ FULLWIDTH YEN SIGN ← 円記号(全角)
   → 金額欄に U+005C が入る、パスに U+00A5 が入る、等の混乱

半角カナの現在の扱い:

・Unicode では U+FF61~U+FF9F(半角形)に収録されている
   → 【使えるが、正規の文字ではなく「互換文字」】
・NFKC 正規化すると【全角カナになる】
・銀行・保険系の固定長ファイルでは今も現役
・画面入力では、全角に寄せるのが一般的

JIS漢字コード

https://ja.wikipedia.org/wiki/JIS%E6%BC%A2%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89

  • JIS X 0208(非漢字、第1、第2水準漢字)
    https://ja.wikipedia.org/wiki/JIS_X_0208

    • 収録
      • ひらがな、かたかな、漢字、全角記号などの 2 バイト文字。
      • 漢字コード部分、
        よく使われる第 1 水準の漢字 2,965 字
        あまり使われないが、ないと不便な第 2 水準の漢字 3,390 字
    • 通称:JIS 基本漢字
  • JIS X 0212(非漢字、補助漢字)
    https://ja.wikipedia.org/wiki/%E8%A3%9C%E5%8A%A9%E6%BC%A2%E5%AD%97

    • 収録
      • JIS X 0208 にない文字を集めた文字集合
      • 使用頻度の低い文字で構成される第 3 水準の漢字および非漢字。
    • 通称:JIS 補助漢字
  • JIS X 0213(非漢字、第1~第4水準漢字)
    https://ja.wikipedia.org/wiki/JIS_X_0213

    • JIS X 0208 を包含し更に第三・第四水準漢字などを加えた上位集合

    • 収録

      • JIS X 0208 の 6,879 字
      • 第 3 水準の漢字 1,259 字(うち、10 字は 2004 年の改定時に追加)
      • 第 4 水準の漢字 2,436 字
      • 非漢字 659 字
    • 通称:JIS 拡張漢字、2000JIS、JIS 第3水準・第4水準漢字

  • JIS X 0221(国際符号化文字集合)
    https://ja.wikipedia.org/wiki/JIS_X_0221

    • ISO/IEC 10646 に対応する JIS 規格。
    • 通称:UCS

補足(JIS X 0212 と JIS X 0213 の関係): この 2 つは
どちらも「JIS X 0208 の拡張」だが、互換性がない——
ここが分かりにくい点である。

【JIS X 0212(1990年)補助漢字】
   ・JIS X 0208 と【組み合わせて使う】設計
   ・Shift_JIS では表現できない(符号空間が足りない)
   ・EUC-JP では表現できた(3 バイト表現)
   ・結果: 【ほとんど普及しなかった】

【JIS X 0213(2000年)拡張漢字】
   ・JIS X 0208 を【包含する】上位集合
   ・JIS X 0212 とは【別の体系】(一部の文字が重複)
   ・Shift_JIS-2004 / EUC-JIS-2004 という符号化がある
   ・Windows は【採用しなかった】(CP932 のまま)
   ・結果: Unicode 経由でのみ実用された

原文の記述で注意すべき点:
「JIS X 0212 = 第 3 水準」という説明は通例の言い方だが、
JIS X 0213 の第 3 水準とは中身が違う
「第 3 水準」という語が 2 つの規格で別のものを指すため、
どちらの規格の話か明示する必要がある。

JIS X 0221 について:
これは Unicode(ISO/IEC 10646)を JIS 規格として取り込んだものであり、
文字を新たに定めたものではない。
文字のチェック方式 の原文に
「(Unicode? JIS X 0221?)」という注記があるのは、
同じものの別名という意味である。

通称

通称1

  • 78JIS または JIS78
    1978 年に制定された JIS C 6226:1978

  • 83JIS または JIS83:
    1983 年に制定された JIS C 6226:1983(JIS X 0208:1983)

  • 90JIS または JIS90:
    1990 年に制定された JIS X 0208:1990(JIS X 0212:1990 を含める場合もある)

  • 97JIS または JIS97:
    1997 年に制定された JIS X 0208:1997

  • 2000JIS または JIS2000:
    2000 年に制定された JIS X 0213:2000

  • 2004JIS または JIS2004:
    2004 年に制定された JIS X 0213:2004

補足(改定ごとに字形が変わった=「例示字体の変更」): 改定の
**最大の実務的影響は、字の追加ではなく「字形の変更」**である。

改定 主な変更
78 → 83 例示字体を大幅に変更(約 300 字)。22 組の入れ替えも発生
83 → 90 「凜」「熙」の2 字を追加文字のチェック方式 の注記)
90 → 97 文字の追加なし。規格の記述を整理
2000 → 2004 168 字の例示字体を変更JIS2004関連
【83JIS の入れ替え問題】
   同じコードに、78JIS と 83JIS で【別の字】が割り当てられた例がある
     例: 0x〜 が 78 では「鴎」、83 では「鷗」…といった対応の変更
   → 78JIS 時代のデータを 83JIS で読むと、字が変わる

【現在も影響が残る箇所】
   ・古い基幹システムのデータ
   ・マイクロフィルム・紙からの電子化データ
   ・戸籍・住民票システム

JIS2004 の字形変更(168 字)は現在も現役の問題であり、
JIS2004関連 で詳しく扱われている。

通称2

  • JIS X 0201

    • ANK コード
  • JIS X 0208

    • JIS 漢字コード
    • JIS 漢字
    • JIS 第1第2水準漢字
  • JIS X 0212

    • JIS 補助漢字
  • JIS X 0213

    • JIS 拡張漢字
    • 2000JIS
    • JIS 第3水準・第4水準漢字

JIS漢字の制定の軌跡

※ 2009 年 1 月現在

規格一般名 情報システム規格名
:以下は制定年度
規格内容 サポートする
文字コード
ASCII JIS X 0201:1969 7 ビット及び 8 ビットの情報交換用
符号化文字集合(漢字は含まない)
Shift-JIS
Unicode
JIS コード JIS X 0202:1975
(ISO/IEC 2022)
文字符号の構造及び拡張 Shift-JIS
Unicode
JIS コード JIS X 0208:1978
JIS X 0208:1983
JIS X 0208:1990
JIS X 0208:1997
非漢字、第一水準漢字、第二水準漢字
1983 年に改正
1990 年に改正 → JIS90
1997 年に改正
Shift-JIS
Unicode
JIS コード JIS X 0212:1990 補助漢字※1の追加(JIS X 0208 と組合せ利用) Unicode
JIS コード JIS X 0213:2000
JIS X 0213:2004
非漢字、第一 ~ 第四水準漢字
2004 年に改正 → JIS2004
Unicode

移行メモ(セル結合を展開した): 元の表は PukiWiki のセル結合記法
~)で「JIS コード」「Shift-JIS
Unicode」を上のセルと
結合していたが、GitHub の表はセル結合に対応しないため、
同じ値を展開して記載した。

補足(2009 年以降の動き): 表は「2009 年 1 月現在」とあるので、
その後の主な出来事を補っておく。

時期 出来事
2010 常用漢字表の改定(196 字追加、5 字削除)。「𠮟」「塡」等が追加され、JIS 第1・第2水準に無い字が常用漢字に入った
2011 IVS(異体字セレクタ) の Adobe-Japan1 コレクションが整備
2011~ Unicode の CJK 拡張が継続(拡張 D~J)
2017 戸籍統一文字・住基ネット統一文字の Unicode 対応が進む
2019 Windows 10 1903 で「UTF-8 をシステム既定に」がベータ提供
2020~ MJ 文字情報一覧表(IPA)が実質的な標準に。約 6 万字

**最も重要な変化は「IVS の実用化」**である。

【IVS(Ideographic Variation Sequence)】
   基底文字 + 異体字セレクタ(U+E0100~U+E01EF)の 2 文字で
   「同じ字だが字形が違う」ものを区別する

   例: 葛 (U+845B)               … 標準の字形
        葛 (U+845B U+E0100)      … 異体字(下部が「匂」)
        葛 (U+845B U+E0101)      … 異体字(下部が「匃」)

   → 【外字を使わずに異体字を扱える】
   → ただし【対応フォントが必要】、【文字数の数え方に注意】

IVS はサロゲート ペアと同じ扱いの難しさを持つ
(見た目 1 文字が string 上は 3 char)。
文字のチェック方式StringInfo /
書記素クラスタの話がそのまま当てはまる。

現在の実務的な指針:

① 新規システムは【UTF-8 / Unicode 一択】
     JIS の水準を意識するのは、レガシー連携の時だけ

② 氏名を扱うなら【MJ 文字情報一覧表】を参照する
     戸籍統一文字・住基統一文字との対応表がある

③ 異体字は【IVS】で扱い、外字は最後の手段

④ 「登録できる文字」を業務ルールとして明文化する
     → 技術で決めず、業務で決める

参考

その他


Tags: 移行, .NET開発, 国際化対応, 文字コード

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally