オブジェクトの広場はオージス総研グループのエンジニアによる技術発表サイトです

プログラミング

(プログラマのための)
いまさら聞けない標準規格の話

第1回 文字コード概要編
オージス総研 技術部 アドバンストテクノロジセンター
伊藤 喜一
2021年7月14日

プログラマがシステム開発において共通で必要となる、技術と業務の狭間の共通知識を解説します。連載第1回は文字コードの概要編です。

0. はじめに

業務システムを開発する場合、プログラミング言語、フレームワーク、ミドルウェア、業務知識など以外に、共通で必要となる知識があります。文字コード、国際化、日付・時刻の扱い、住所コード、郵便番号、電話番号などの各種コード、…。
本連載では、プログラマがシステム開発で必要となる、技術と業務の狭間の共通知識を解説して行きたいと思います。

連載第1回は文字コードの概要編です。コンピュータシステムにおいて、文字情報は文字コードを用いて処理されます。文字コードとは、各文字に対応付けられた数値 (符号) のことです。近年、新規に開発される業務システムでは Unicode が使われることが多いと思いますが、既存システムとの連携など他の文字コードが使用されることもまだまだあります。
本記事では、文字コードの仕組みの要点を解説し、実際にシステム開発を行う上で注意すべき点を紹介します。

1. ビット、バイト、2進数と16進数

コンピュータでは、電気信号の off/on を数値の 0/1 に対応付けその並びで情報を表します。0/1 の1つ分をビット (bit) といい、通常7ビットまたは8ビットを文字コードの最小単位としバイト (byte) と呼びます。7ビットで 27 = 128通り、8ビットで 28 = 256通りの文字を区別することが可能です。
0/1 の並びの右端から1つずつ数値を増やしていき、1になったら次の位の数値を上げる (繰り上がり) を繰り返すと2進数になります。0/1 だけだと見ずらいので、0~9 と A~F の16文字を用いて4ビットずつまとめると16進数になります。これらに例えば A, B, C, … と順に文字を対応付けると、CAP という単語は 02 00 0F という16進数の文字コードの並びで表すことができます。なお、16進数を 0x0202h のように表すこともありますが、本記事では特にこだわらない場合は、16進数の文字コードを単に 02 のように表します。

ビット、バイト、2進数と16進数

2. 符号化文字集合と文字符号化方式

初期の文字コードは文字にコードを対応付けるシンプルなものでしたが、複数の文字コードを組み合わせて使ったり、用途に応じて形式を変換したりすることが増えたため、「符号化文字集合」と「文字符号化方式」の大きく2段階で文字コードを説明することが多くなってきました。

用語 説明
符号化文字集合
(CCS: Coded Caracter Set)
単に「文字集合」とも。
文字と一意に振られた番号のペアの集合。
JIS X 0201、JIS X 0208、Unicode など。
文字符号化方式
(CES: Character Encoding Scheme)
単に「符号化方式」、「エンコーディング」とも。
文字に振られた番号をバイト表現に変換する方法。
ISO-2022-JP、EUC-JP、Shift_JIS、UTF-8、UTF-16 など。

符号化文字集合と文字符号化方式

符号化文字集合の各文字に振られた番号のことを「符号位置 (code point)」と呼びます。
なお、HTML の文字コード指定の charset や Java のクラスの Charset は、どちらかというと (その名に反して)「文字符号化方式」の方に近いと思います。

3. 代表的な符号化文字集合

本章では、日本で主に使用される代表的な符号化文字集合について説明します。

符号化文字集合 説明
ASCII 7ビットコード。米国の国内規格。制御文字、数字、ラテン文字、記号等を定義。
ISO/IEC 8859 8ビットコード。ASCII に欧州等の各国語の文字を追加。8859-1 は西欧諸国の言語に対応。
JIS X 0201 8ビットコード。ASCII の一部記号を入れ替え、片仮名を追加。
JIS X 0208 2バイトコード。通称「JIS基本漢字」。平仮名、片仮名、日常的によく使用する漢字などを定義。
マイクロソフト
標準キャラクタセット
マイクロソフトが Windows 3.1 リリースに合わせて、JIS X 0201、JIS X 0208、NEC と IBM のベンダー外字を統合して作成。
JIS X 0212 2バイトコード。通称「JIS補助漢字」。JIS X 0208 を補完する漢字を追加。
JIS X 0213 2バイトコード。通称「JIS拡張漢字」。JIS X 0208 を拡張して、人名・住所・専門分野で使用する漢字等を追加。
EBCDIC 8ビットコード。IBM により定義。主にメインフレームなどで使用。
Unicode 世界中の文字を、1つのコード体系で切り替えを行わずに扱えるよう設計された符号化文字集合

3-1. ASCII (ISO/IEC 646 IRV)

American Standard Code for Information Interchange の略。
1963年に米国の ASA (現在の ANSI) が制定した7ビットコードです。制御文字、数字、ラテン文字 (英語のアルファベット)、記号などを定義しています。図の灰色部分は「制御文字 (control character)」と呼ばれ、ディスプレイ、プリンター、通信装置などに対して特別な動作をさせるための文字です。HT (水平タブ)、LF (改行)、CR (復帰) などは通常のテキストでもよく使われると思います。HT などは文字の略称であり、これがそのまま表示や印刷されるわけではありません。また、制御文字以外の、数字、ラテン文字、記号など、表示や印刷が可能な文字のことを「図形文字 (graphic character)」と呼びます。

ASCII は、1967年に ISO R 646 として国際規格になりました。図の黄色部分は変更可能であり、各国で自国の通貨記号 (£、¥) やアクセント付きの文字 (à、ö) などに置き換えられています。
1973年の改正で、変更可能部分に推奨文字を割り当てた「国際基準版 (IRV: International Reference Version)」が制定されましたが、24 が国際通貨記号 (¤)、7E がオーバーライン ( ̄) と ASCII と異なっていました。
1991年の改正で、ISO/IEC 646 となり、国際基準版 (IRV) の国際通貨記号 (¤) がドル記号 ($) に、オーバーライン ( ̄) がチルダ (~) に変更され、ASCII と完全一致になりました。
現在、欧州各国では ISO/IEC 646 よりも、次の ISO/IEC 8859 がよく使用されています。

ASCII (ISO/IEC 646 IRV)

3-2. ISO/IEC 8859

欧州を中心に ASCII を拡張してより多くの文字を格納できるようにした8ビットコードです。 複数のマッピングが存在し、そのうち 8859-1 はフランス語、ドイツ語、イタリア語、スペイン語など西欧諸国の言語に対応しています。
ISO/IEC 646 は変更可能部分に各国語の文字を割り当てているため、複数言語を扱う場合、面倒な切り替えが必要ですが、ISO/IEC 8859 は同じマッピング内であれば複数言語を切り替えなしで扱うことができるため、欧州各国ではこちらの方がよく使用されています。

日本で直接使用されることは少ないですが、後述する Unicode の先頭部分と完全に一致すること、欧米で作られた多言語化が不十分なソフトウェアが 8859-1 で決め打ちされているケースが多いこと、JIS X 0213 に文字集合が取り込まれたことなどから、ときどき目にすることがあります。

ISO/IEC 8859-1

3-3. JIS X 0201 (旧 JIS C 6220)

1969年に制定された8ビットコードで、正式名称を「7ビット及び8ビットの情報交換用符号化文字集合」と言います。制定当初は JIS C 6220 という規格番号でした。
ASCII (ISO/IEC 646) の 5C をバックスラッシュ (\) から円記号 (¥) に、7E をチルダ (~) からオーバーライン ( ̄) に置き換え、さらに8ビットに拡張して、A1DF に片仮名を追加しました。
左半分を「ラテン文字用図形文字集合」、右半分を「片仮名用図形文字集合」と呼びます。
現在、単独で使用されることは少ないですが、後述する Shift_JIS の一部として使用されます。

JIS X 0201

3-4. JIS X 0208 (旧 JIS C 6226)

1978年に制定された2バイトコードで、正規式名称を「7ビット及び8ビットの2バイト情報交換用符号化漢字集合」と言います。制定当初は JIS C 6226 という規格番号でした。
JIS X 0201 で扱える日本語は片仮名のみでしたが、JIS X 0208 では、94×94の符号位置に、平仮名、片仮名、日常的によく使用する漢字など、非漢字 (524字)、第1水準漢字 (2965字)、第2水準漢字 (3390字) を定義しています。文字の選定に当たっては、当用漢字、人名用漢字、地名、行政情報処理用漢字などが元にされたようです。
符号位置は1から94までの2つの自然数の組で 16-1 のように表し、最初の数値を「区 (row)」、2番目の数値を「点 (cell)」、合わせて「区点番号」と呼びます。

JIS X 0208 は数年おきに改定されましたが、1983年の改定 (JIS83) では、字体の入替えや字形の大きな変更が行われ、森鷗外の「鷗」が「鴎」としか書けないなど大きな問題となり、その影響は Unicode が主流となった現在まで続いています。

規格 略称 説明
JIS C 6226-1978 78JIS, JIS78 非漢字 (453字)、第1水準漢字 (2965字)、第2水準漢字 (3384字) を定義。
JIS C 6226-1983 83JIS, JIS83 記号、罫線素片追加 (71字)、第1水準と第2水準で字体の入れ替え (22組)、字体の変更と従来の字体の追加 (4組)、字体・字形の変更。
JIS X 0208-1990 90JIS, JIS90 人名用漢字の追加 (2字)。字形の変更。
JIS X 0208:1997 97JIS, JIS97 文字の追加なし。典拠の調査、包摂基準の明確化等。符号化方式 (ISO-2022-JP、EUC-JP、Shift_JIS) の取り込み。
JIS X 0208:1997
/AMENDMENT 1:2012
2010年常用漢字改定への対応。

3-5. マイクロソフト標準キャラクタセット

パーソナルコンピュータ (PC) の日本語対応にあたり、マイクロソフトが中心となって、JIS X 0201 と JIS X 0208 を符号化した Shift_JIS (後述) が策定されましたが、OEM 提供された各ベンダーは JIS X 0208 の空き領域に独自に文字を追加しました (ベンダー外字, 機種依存文字)。
マイクロソフトは、日本語版 Windows 3.1 のリリースに合わせて、JIS X 0201、JIS X 0208 に、シェアが比較的大きかった NEC と IBM のベンダー外字を統合し、「マイクロソフト標準キャラクタセット」と呼ばれる符号化文字集合を作成しました。

NEC 由来の「NEC特殊文字」を13区に配置、IBM 由来の「IBM拡張漢字」を115区~119区に配置、「IBM拡張文字」のうち「NEC特殊文字」に含まれない文字を「NEC選定IBM拡張文字」として89区~92区に配置しています。また、これらのうち10字は JIS X 0208 (JIS C 6226-1983) にも追加されています。
重複収録された文字について、Unicode など他の文字コードから変換する場合、JIS X 0208-1990、NEC特殊文字、IBM拡張文字 の順に符号位置が優先されます。例えば、ローマ数字の「Ⅰ」は、IBM拡張文字の 115-11 ではなく、NEC特殊文字の 13-21 に、「崎」の異体字「﨑」は、NEC選定IBM拡張文字の 89-85 ではなく、IBM拡張文字の 116-19 にそれぞれ変換されます。

マイクロソフト標準キャラクタセット

3-6. JIS X 0212

1990年に制定された2バイトコードで、正式名称を「情報交換用漢字符号-補助漢字」と言います。
94×94の符号位置に、JIS X 0208 に含まれない非漢字 (266字)、漢字 (5801字) を定義しています。
Shift_JIS で符号化できないため、PC で使用することができず、あまり普及しませんでした。ただし、後述する Unicode の文字選定の入力となったため、Windows 98 以降では、JIS X 0212 の文字集合を Unicode として使用できます。

3-7. JIS X 0213

JIS X 0208 を拡張して、2000年に制定された2バイトコードで、正式名称を「7ビット及び8ビットの2バイト情報交換用符号化拡張漢字集合」と言います。
2×94×94の符号位置に、非漢字 (1183字)、第1水準漢字 (2965字)、第2水準漢字 (3390字)、第3水準漢字 (1259字)、第4水準漢字 (2436字) を定義しています。 符号位置は3つの自然数の組で 1-16-1 のように表し、最初の数値を「面 (plane)」、2番目の数値を「区 (row)」、3番目の数値を「点 (cell)」、合わせて「面区点番号」と呼びます。
人名・住所・専門分野等で必要な文字について、用例・典拠を徹底的に調べ上げ、文字の同定を行った上で文字の追加が行われました。JIS83 で使えなくなった「鷗」や、人名用漢字の異体字「祐」なども追加され、常用漢字、人名用漢字が書き分けられないことはなくなりました。

マイクロソフト標準キャラクタセットのうち、(「∑」を除く) NEC特殊文字については1面の同じ区点に追加されていますが、IBM拡張文字については符号位置に互換性がありません。また、2面については JIS X 0212 で使用済みの符号位置を避けて配置しています。

規格 略称 説明
JIS X 0213:2000 JIS2000 JIS X 0208 を拡張し、非漢字 (659字)、第3水準漢字 (1249字)、第4水準漢字 (2436字) を追加。漢字については、JIS78 の字体の復活 (29字)、常用漢字、人名用漢字への包摂基準非適用による文字追加 (104字)。
JIS X 0213:2000
/AMENDMENT 1:2004
(JIS X 0213:2004)
JIS2004 表外漢字字体表への対応。UCS互換のための文字追加 (10字)。
JIS X 0213:2000
/AMENDMENT 2:2012
2010年常用漢字改定への対応。

JIS X 0208、JIS X 0213 において、収録文字数は以下の通り変化しています。

(表は横にスクロールしてご覧ください)

規格 略称 非漢字 第1水準 第2水準 第3水準 第4水準 合計
JIS C 6226-1978 78JIS, JIS78 453 2965 3384 6802
JIS C 6226-1983 83JIS, JIS83 524 3388 6877
JIS X 0208-1990 90JIS, JIS90 3390 6879
JIS X 0208:1997 97JIS, JIS97
JIS X 0213:2000 JIS2000 1183 1249 2436 11223
JIS X 0213:2004 JIS2004 1259 11233

3-8. EBCDIC

Extended Binary Coded Decimal Interchange Code の略。
IBM により定義された8ビットコードで、主にメインフレームなどで使用されています。最初は数字と英大文字、いくつかの記号のみ使用可能でした。符号位置が ASCII と非互換ですが、パンチカードとの互換性を重視したためと言われています。
後に、英小文字を追加した拡張、片仮名を追加した拡張 (図の黄色の背景が拡張部分) が作られ、さらにどちらも互いに不足する文字 (ピンクの背景) が追加されましたが、両者の符号位置に互換性はありません。また機種ごとに細かい差異も存在するため、データ交換の際は注意が必要です。

日本語の漢字への対応では、IBM は独自の符号化文字集合を定義し追加しました (IBM漢字)。これは、マイクロソフト標準キャラクタセットの「IBM拡張文字」へ引き継がれています。日本のベンダーの多くは JIS X 0208 (EUC) をベースに拡張を行っているようです。

EBCDIC

3-9. Unicode (ISO/IEC 10646, JIS X 0221)

世界中の文字を、切り替えを行わずに1つのコード体系で扱えるよう設計された符号化文字集合です。
Unicode は、1991年、マイクロソフト、Apple、IBM、サン・マイクロシステムズ、ヒューレット・パッカード、ジャストシステムズなどが参加するユニコードコンソーシアムによって制定されました。
ISO/IEC 8859 で欧州各国の文字を一緒に扱えるようになりましたが、Unicode では範囲を全世界に広げました。背景には、インターネットの普及や、ソフトウェアを大きな変更なく全世界で使えるようにしたいという要求があったと思われます。
Unicode は、当初、16ビット固定長 (0000~FFFF) の 216 = 65536 にすべての文字を収録する目論見で、中国、日本、韓国の漢字を同じ符号位置に押し込める (CJK統合漢字) などの工夫を行いましたが、各国からの文字追加要求に応えるため、1996年に、0000~10FFFF の 17×256×256 = 1114112 に拡張されました。符号位置は4桁以上の16進数で U+20B9F のように表します。6桁の16進数で表したときの最初の2桁を「面 (plane)」、次の2桁を「区 (row)」、最後の2桁を「点 (cell)」と呼びます。

一方、ISO は世界中の文字を符号の統合を行わずにそのままの形で32ビットに収める ISO 10646 を策定していました。しかし、Unicode との一本化を求める各国から賛同が得られず、Unicode と同じ文字集合、符号位置とすることになり、現在は両者が連携を取りながら拡張が行われています。32ビットを想定して、「群 (group)」、「面」、「区」、「点」という概念を定義しましたが、Unicode と同一になったことで、「群」は廃止されました。
ISO/IEC 10646 は、日本では JIS X 0221 「国際符号化文字集合 (UCS)」として翻訳されています。

Unicode

17面あるうちの最初の第0面を 基本多言語面 (BMP: Basic Multilingual Plane)、それ以降の面を追加面 (Supplementary Planes) と言います。日本語関連では、JIS X 0201、JIS X 0208、JIS X 0212 の収録文字はすべて BMP の範囲で表現できますが、JIS X 0213 の収録文字の一部は、BMP の追加申請に間に合わなかったため、追加面に登録されており、16ビット単位で表現する場合 (UTF-16)、サロゲートペアという仕組みを用いることになります (後述)。さらに、鼻濁音を表す「か゚ (か+゜)」など25字は符号位置1つで表すことができず、符号位置を2つ用いる必要があります (結合文字列、後述)。

(表は横にスクロールしてご覧ください)

制定年 バージョン 標準規格との対応 概要 日本語関連
1991年 Unicode 1.0 16ビットコード。 JIS X 0201
1992年 Unicode 1.0.1 CJK統合漢字の導入。 JIS X 0208、JIS X 0212
1993年 Unicode 1.1 ISO/IEC 10646-1:1993
(JIS X 0221:1995)
ISO/IEC 10646 の初版。
1996年 Unicode 2.0 ISO/IEC 10646-1:1993 Amd.7 ハングルの大移動、 サロゲートペアの導入。
1999年 Unicode 3.0 ISO/IEC 10646-1:2000
(JIS X 0221-1:2001)
アーキテクチャと基本多言語面。 JIS X 0213 の一部
2001年 Unicode 3.1 ISO/IEC 10646-2:2001 追加面。 JIS X 0213 の一部
2002年 Unicode 3.2 ISO/IEC 10646-1:2000 Amd.1 異体字セレクタ (BMP) 。 JIS X 0213 (正式対応)
2003年 Unicode 4.0 ISO/IEC 10646:2003
(JIS X 0221:2007)
異体字セレクタ補助。
2008年 Unicode 5.1 ISO/IEC 10646:2003 Amd.4 異体字セレクタの漢字への適用。
2010年 Unicode 6.0 ISO/IEC 10646:2010 携帯電話の絵文字
2011年 ISO/IEC 10646:2011 Unicode と ISO/IEC 10646 を同一の文字集合と定義。
2012年 Unicode 6.1 ISO/IEC 10646:2012
(JIS X 0221:2014)
2013年 Unicode 6.3 CJK互換漢字の SVS 登録
2014年 Unicode 7.0 ISO/IEC 10646:2012 Amd.2 絵文字
2015年 Unicode 8.0 ISO/IEC 10646:2014 Amd.1 波ダッシュの例示字形修正
2017年 Unicode 10.0 ISO/IEC 10646:2017 変体仮名
2019年 Unicode 12.0 ISO/IEC 10646:2017 Amd.2 小書きの「ゐ」「ゑ」「を」「ヰ」「ヱ」「ヲ」「ン」
Unicode 12.1 「令和」の合字
2020年 Unicode 13.0 ISO/IEC 10646:2020


日本語関連の文字は以下のように配置されています。JIS X 0201、JIS X 0208、JIS X 0213 等と符号位置に互換性がないため、相互に変換する場合は変換表を用いる必要があります。

範囲 文字ブロック 日本語関連
U+0000~U+007F C0制御文字と基本ラテン文字 US-ASCII と同一
U+0080~U+00FF C1制御文字とラテン1補助 ISO-8859-1 と同一
U+0100~U+036F (複数ブロック) 修飾付きラテン文字、修飾文字等
U+0370~U+03FF ギリシア文字 ギリシア文字
U+0400~U+04FF キリル文字 キリル文字
U+1E00~U+1FFF (複数ブロック) 修飾付きラテン文字、ギリシア文字
U+2000~U+206F 一般句読点 記号等
U+20A0~U+20CF 通貨記号 ユーロ記号
U+2100~U+24FF (複数ブロック) 記号、ローマ数字、丸付き英数字等
U+2500~U+257F 罫線素片 罫線素片
U+25A0~U+29FF (複数ブロック) 記号
U+3000~U+303F CJKの記号と句読点 句読点等
U+3040~U+309F 平仮名 平仮名、濁点・半濁点
U+30A0~U+30FF 片仮名 片仮名
U+31F0~U+31FF 片仮名拡張 小書き片仮名
U+3200~U+32FF 囲みCJK文字・月 括弧付き漢字、丸付き数字等
U+3300~U+33FF CJK互換用文字 単位、元号等
U+3400~U+4DBF CJK統合漢字拡張A 拡張漢字
U+4E00~U+9FFC CJK統合漢字 漢字
U+D800~U+DFFF サロゲート領域 サロゲートペア
U+E000~U+F8FF 私用領域 ユーザー外字
U+F900~U+FAFF CJK互換漢字 IBM拡張漢字、拡張漢字
U+FE00~U+FE0F 異体字セレクタ 標準異体字シーケンス (SVS)
U+FE30~U+FE4F CJK互換形 記号
U+FFF0~U+FFEF 半角・全角形 半角片仮名、全角英数字等
U+FFF0~U+FFFF 特殊記号 置換文字、BOM
U+20000~U+2A6DD CJK統合漢字拡張B 拡張漢字
U+E0100~U+E01EF 異体字セレクタ補助 漢字異体字シーケンス (IVS)

日本文字部分レパートリ

ISO/IEC 10646 (JIS X 0221) では任意の部分集合による実装が認められていますが、送受信双方で正しく処理できることを保証するため、特定用途で使われる部分集合「組 (collection)」を規定しています。
システムで利用可能な文字、システム間連携で利用可能な文字を定義する際、参考になると思います。

日本語関連では、以下の部分集合が「日本文字部分レパートリ」として定義されています。
「基本日本文字集合 (BASIC JAPANESE)」は ASCII + JIS X 0201 + JIS X 0208 から重複収録された半角・全角形を除いたもの、「通用日本文字集合 (COMMON JAPANESE)」はデファクトスタンダードである「マイクロソフト標準キャラクタセット」を事実上追認したものとなっています。「拡張非漢字集合 (JAPANESE NON IDEOGRAPHICS EXTENSION)」、「JIS2004 拡張漢字集合 (JIS2004 IDEOGRAPHICS EXTENSION)」は JIS X 0213 の非漢字、漢字から JIS X 0208 重複分を除いたもの、「補助漢字集合 (JAPANESE IDEOGRAPHICS SUPPLEMENT)」は JIS X 0212 の漢字部分、「日本語中核漢字集合 (JAPANESE CORE KANJI)」は常用漢字です。

(表は横にスクロールしてご覧ください)

レパートリ 文字数 ASCII JIS X
0201
JIS X
0208
JIS X
0213
JIS X
0212
その他
(各文字集合の文字数) 14591 95 158
(65)
6879 11233
(4354)
6067
(3158)
40
基本日本文字集合
(BASIC JAPANESE)
6884 非漢字 95 95
(2)
431 431
(0)
0 0
漢字 0 0 6356 6356
(0)
0 0
通用日本文字集合
(COMMON JAPANESE)
7493
(609)
非漢字 95
(0)
158
(63)
523
(92)
611
(88)
2
(0)
6
漢字 0 0 6356
(0)
6632
(276)
279
(50)
34
JIS2004 拡張漢字集合
(JIS2004 IDEOGRAPHICS EXTENSION)
3695 0 0 0 3695 2743
(0)
0
補助漢字集合
(JAPANESE IDEOGRAPHICS SUPPLEMENT)
5801 0 0 0 2743 5801
(3058)
0
日本語中核漢字集合
(JAPANESE CORE KANJI)
2136 0 0 2132 2136
(4)
2
(0)
0
拡張非漢字集合
(JAPANESE NON IDEOGRAPHICS EXTENSION)
631 0 0 0 631 165
(0)
0


  • JIS X 0201 の ( ) 内の数値は、ASCII との重複分を除いた文字数。
  • JIS X 0213 の ( ) 内の数値は、JIS X 0208 との重複分を除いた文字数。
  • JIS X 0212 の ( ) 内の数値は、JIS X 0213 との重複分を除いた文字数。
  • 基本日本語文字集合の「仝」は、JIS X 0208、JIS X 0213 では「非漢字」だが、ここでは ISO/IEC 10646 に合わせて「漢字」に計上した。
  • 通用日本文字集合の ( ) 内の数値は、基本日本語文字集合との重複分を除いた文字数。
  • 拡張非漢字集合には、全角 ASCII 4字 「"」、「'」、「-」、「~」、結合文字列で表す25字を含まず、結合文字の半濁点「゜」を含む。

3-10. 符号化文字集合概観

ここまで説明した符号化文字集合を整理すると、以下の図のようになります。
文字コードに関するテストで同値分割する際の参考になるかと思います。
マイクロソフト標準キャラクタセットの重複収録文字は優先される文字集合へ寄せています。

3-11. 字種・字体・字形

何を同じ文字とみて、何を異なる文字とみるかは、厳密に考え始めると意外に簡単ではありません。

同じ音訓・意味を持ち、単語や文章を書く際に互換性がある文字のまとまりを「字種」と言います。
例えば、「亜」と「亞」は同じ字種であり、「山」と「川」は異なる字種になります。

また、個々の文字の見た目、形状のことを「字形」と言います。
例えば、「亜」と「亞」は異なる字形ですし、手書き文字と印刷文字、明朝体とゴシック体などの違いも字形の違いと捉えることができます。

字形の違いの中で、その文字特有の骨組みが内在されるものをグルーピングし「字体」と呼びます。
例えば、「亜」と「亞」は異なる字体ですが、手書き文字と印刷文字、明朝体とゴシック体などの違いは同じ字体と見なします。
文字コードでは、一般に同じ字体に対して一意のコード (符号位置) を割り振ります。

JIS X 0213 文字 Unicode
1-27-19 U+5C71
1-32-78 U+5DDD

新字体と旧字体

日本において、内閣が告示した漢字表 (常用漢字など) で提示された簡易字体を「新字体」と言います。これに対して、従来の字体を「旧字体 (康熙字典体)」と言います。
新字体は手書きで使われていた略字等を昇格させたものが多いそうです。

JIS X 0213 文字 Unicode 備考
1-16-1 U+4E9C 新字体
1-48-19 U+4E9E 旧字体

異体字

同じ字種だが、異なる字体を有する文字を「異体字」と言います。また、異体字の中で、規範として選ばれた字体を「正字体」と言います。「新字体」、「旧字体」も異体字の一種です。

JIS X 0213 文字 Unicode 備考
1-26-74 U+5D0E 正字体
1-47-82 U+FA11 異体字 (たちさき、たつさき)

包摂規準

字種・字体・字形について説明しましたが、何を「字体」と見なすかはそれでも簡単な話ではありません。
JIS X 0208:1997 (JIS97) ではこの基準を明確化し「包摂 (ほうせつ) 規準」として規定しました。
JIS X 0213:2000 (JIS2000) ではこの規準を受け継ぎつつ、何点か見直しが行われました。
例えば、「鴎」と「鷗」は JIS97 では同じ字体に包摂されますが、JIS2000 では異なる字体と認識されます。

JIS X 0208 JIS X 0213 文字 Unicode 備考
18-10 1-18-10 U+9D0E 簡易慣用字体
(包摂) 1-94-69 U+9DD7 印刷標準字体

また、JIS2000 において、常用漢字、人名用漢字で提示された字体は包摂規準の適用除外とされ、異なる符号位置が与えられました。
例えば、「神」と「神」は JIS97 では同じ字体に包摂されますが、JIS2000 では異なる符号位置が与えられています。

JIS X 0208 JIS X 0213 文字 Unicode 備考
31-32 1-31-32 U+795E 新字体
(包摂) 1-89-28 (U+FA19) 旧字体、CJK互換漢字

なお、「高」と「髙」などは、Unicode では異なる符号位置が与えられていますが、JIS97 でも JIS2000 でも包摂の範囲内とされ同じ符号位置が振られています。

JIS X 0208 JIS X 0213 文字 Unicode 備考
25-66 1-25-66 U+9AD8 常用漢字
(包摂) (包摂) U+9AD9 異体字 (はしごだか)

3-12. 外字

特定の文字集合に含まれない文字のことを「外字」と言います。日本では長らく JIS X 0208 が標準として使われたため、JIS X 0208 に含まれない文字を指すことが多いです。
外字のうち、ベンダーが独自に追加した文字を「ベンダー外字 (機種依存文字)」、利用者が独自に追加した文字を「ユーザー外字」と呼ぶこともあります。
例えば、マイクロソフト標準キャラクタセットの「NEC特殊文字」、「IBM拡張文字」などは「ベンダー外字 (機種依存文字)」です。Windows においては、95区~114区がユーザー外字領域として使えることになっていました。Unicode では、U+E000~U+F8FF などが私用領域という名前のユーザー外字領域になっています。

4. 代表的な文字符号化方式

本章では、日本で主に使用される代表的な文字符号化方式について説明します。

符号化文字集合 文字符号化方式 説明
ASCII US-ASCII 7ビット×1バイトの固定幅符号化方式。
ISO/IEC 8859-1 ISO-8859-1 8ビット×1バイトの固定幅符号化方式。
JIS X 0201 8ビット×1バイトの固定幅符号化方式が一般的。
JIS X 0208 漢字用7ビット符号 7ビット×2バイトの固定幅符号化方式。EDI等で利用。
ISO-2022-JP 7ビット符号化方式。電子メール等で利用。
EUC-JP 8ビット符号化方式。UNIX系OS等で利用。
Shift_JIS 8ビット×(1~2) の可変幅符号化方式。CP/M、MS-DOS等で利用。
マイクロソフト
標準キャラクタセット
Windows-31J 8ビット符号化方式。Shift_JIS を拡張。Windows XP 以前で利用。
JIS X 0213 漢字用8ビット符号 8ビット×2バイトの固定幅符号化方式。
ISO-2022-JP-2004 ISO-2022-JP の JIS2004 対応版。
EUC-JIS-2004 EUC-JP の JIS2004 対応版。
Shift_JIS-2004 Shift_JIS の JIS2004 対応版。
EBCDIC IBM CP930 8ビット符号化方式。EBCDIC カナ文字拡張+IBM漢字が利用可能。
IBM CP939 8ビット符号化方式。EBCDIC 英小文字拡張+IBM漢字が利用可能。
Unicode UTF-32 32ビット×1 の固定幅符号化方式。
UTF-16 16ビット×(1~2) の可変幅符号化方式。Windows 98 以降や Java の内部コードとして利用。
UTF-8 8ビット×(1~4) の可変幅符号化方式。ファイルなど、外部コードとして利用。

インターネットで利用可能な文字符号化方式の名称は IANA (Internet Assigned Numbers Authority) で Character Sets として管理されています。

4-1. US-ASCII

ASCII (ISO/IEC 646 IRV) は7ビットコードなので、符号化文字集合の符号位置をそのまま使用します。IANA には US-ASCII という名前で登録されています。

4-2. ISO-8859-1

ISO/IEC 8859 には、8ビットで符号化する方式と7ビットで符号化する方式があります。ISO/IEC 8859-1 に制御文字を加え、8ビットで符号化した方式を ISO-8859-1 と呼びます。

4-3. JIS X 0201

JIS X 0201 には、8ビットで符号化する方式と7ビットで符号化する方式があります。8ビットで符号化し、後述する Shift_JIS の中で使われることが多いです。

4-4. ISO/IEC 2022 (JIS X 0202)

文字集合を7ビットまたは8ビットで符号化するためのフレームワークで、複数の文字集合を扱う方法も規定しています。7ビット符号は、32個の制御文字の領域「CL」と、94個または96個の図形文字の領域「GL」を持ち、8ビット符号は、これに加えて、制御文字の領域「CR」と、図形文字の領域「GR」を持ち、これらに文字集合を割り当てて使用します。複数バイトで1つの文字を符号化することも可能です。
制御文字集合の32や図形文字集合の94または96は、ASCII の制御文字、図形文字の個数に由来しており、JIS X 0208 などが94×94の構造になっているのも、ISO/IEC 2022 で使うことを意図しているためです。

ISO/IEC 2022

4-5. JIS X 0208 の符号化方式

本節では、JIS X 0208 の符号化方式について説明します。

漢字用7ビット符号

JIS X 0208 単独で符号化する最もシンプルな符号化方式です。
1文字が7ビット×2バイトの固定幅となるため、企業間のデータ交換 (EDI: Electric Data Interchange) において、2バイト固定のデータ項目で利用されます。
英数字は ASCII が使えないため、JIS X 0208 の対応する文字を使用します。

JIS X 0208 を GL に呼び出して固定します。区点番号に16進の 0x2020 を加えるとバイト列になります。

文字 A 1
区点 3-33 3-17 5-2 16-1
変換方法 ↓+0x2020 ↓+0x2020 ↓+0x2020 ↓+0x2020
バイト列 23 41 23 31 25 22 30 21

ISO-2022-JP (RFC 1468)

7ビットを単位とする符号化方式で、電子メール等で利用されます。
ISO/IEC 2022 の仕組みを用いて、ASCII、JIS X 0201 (JIS C 6220) のラテン文字 (¥、 ̄)、JIS X 0208 (JIS C 6226) をエスケープシーケンスで切り替えます。

文字集合 バッファ 16進表記 文字表記 領域
ASCII (ISO/IEC 646 IRV) G0 1B 28 42 ESC ( B GL
JIS X 0201 (JIS C 6220) のラテン文字集合 G0 1B 28 4A ESC ( J GL
JIS C 6226-1978 G0 1B 24 40 ESC $ @ GL
JIS X 0208-1983 または JIS X 0208-1990 G0 1B 24 42 ESC $ B GL
  1. 最初は、GL に ASCII を呼び出した状態で始まります (正確には、ASCII を G0 に指示し、GL に呼び出し)。
  2. エスケープシーケンスを用いて他の文字集合を呼び出すことができます (正確には、G0 に指示し、GL に呼び出し)。呼び出した文字集合は別の呼び出しがあるまで使い続けることができます (ロッキングシフト)。
  3. 制御文字や空白は、ASCII または JIS X 0201 が呼び出された状態でのみ使用できます。
  4. 行末では、ASCII に戻す必要があります。
  5. JIS X 0208-1983 を指示した状態で、JIS X 0208-1990 も使用できます (厳密には ISO/IEC 2022 非準拠)。

JIS X 0208 の文字は、区点番号に16進の 0x2020 を加えるとバイト列になります。

文字 A 1
区点 (41) (31) 5-2 16-1
変換方法 ↓そのまま ↓そのまま JIS X 0208 を指示 ↓+0x2020 ↓+0x2020 ASCII へ戻す
バイト列 41 31 1B 24 42 25 22 30 21 1B 28 42

EUC-JP

8ビットを単位とする符号化方式で、UNIX系OS等で利用されます。
ISO/IEC 2022 の仕組みを用いて、ASCII、JIS X 0208、JIS X 0201 の片仮名、JIS X 0212 を符号化します。

文字集合 バッファ 16進表記 文字表記 領域
ASCII (ISO/IEC 646 IRV) G0 GL
JIS X 0208 G1 GR
JIS X 0201 の片仮名文字集合 (実装任意) G2 8E SS2 GR
JIS X 0212 (実装任意) G3 8F SS3 GR
  1. 各文字集合を G0~G3 のバッファに指示し、G0 (ASCII) を GL、G1 (JIS X 0208) を GR に呼び出した状態で始まります。
  2. JIS X 0201 の片仮名、JIS X 0212 を使用する場合は、シングルシフトで1文字分だけ GR に呼び出します (実装は任意)。

JIS X 0208、JIS X 0212 の文字は、区点番号に16進の 0xA0A0 を加えるとバイト列になります。

文字 A 1 (SS2)
区点 (41) (31) (B1) 5-2 16-1
変換方法 ↓そのまま ↓そのまま 1文字だけ半角片仮名 ↓そのまま ↓+0xA0A0 ↓+0xA0A0
バイト列 41 31 8E B1 A5 A2 B0 A1

Shift_JIS (SJIS, CP932)

8ビットの1符号化文字を1~2符号単位で表す可変幅符号化方式で、MS-DOS 等で利用されていました。
JIS X 0208 の 94×94 の文字集合を 47×188 に変形し、1バイト目を JIS X 0201 の隙間に配置することで、切り替えなしに両者が使用できるよう設計されています。2バイト目で 7F を空けているのは、制御文字を避けるためです。

区点 (k, t) から Shift_JIS (s1, s2) へは以下の計算式で変換します。

 1 ≦ k ≦ 62 のとき: s1 = (k - 1) ÷ 2 + 0x81
63 ≦ k ≦ 94 のとき: s1 = (k - 1) ÷ 2 + 0xC1

k が奇数の場合:
   1 ≦ k ≦ 63 のとき: s2 = t + 0x3F
  64 ≦ k ≦ 94 のとき: s2 = t + 0x40
k が偶数の場合:
  s2 = t + 0x9E
文字 A 1
区点 (41) (31) (B1) 5-2 16-1
変換方法 ↓そのまま ↓そのまま ↓そのまま ↓変換 ↓変換
バイト列 41 31 B1 83 41 88 9F

以下の図で、EUC-JP の漢字が ASCII を避けて、Shift_JIS の漢字が JIS X 0201 を避けて配置されているのが分かるかと思います。

4-6. Windows-31J (MS932)

マイクロソフトが、日本語版 Windows 3.1 のリリースに合わせて、JIS X 0201、JIS X 0208 に、NEC と IBM のベンダー外字を統合して作成した符号化文字集合「マイクロソフト標準キャラクタセット」を Shift_JIS と同じ計算式 (ただし、120区まで拡張) で符号化する方式です。Windows XP まで、内部コードとしても利用されていました。

文字 A 1
区点 (41) (31) (B1) 5-2 13-1 16-1 115-40
変換方法 ↓そのまま ↓そのまま ↓そのまま ↓変換 ↓変換 ↓変換 ↓変換
バイト列 41 31 B1 83 41 87 40 88 9F FA 67

Shift_JIS と Windows-31J は同じ符号化方式のはずでしたが、Unicode との変換において以下の差異があることが知られています (波ダッシュ問題)。

(表は横にスクロールしてご覧ください)

区点 SJIS 名称 文字 Shift_JIS でデコード Windows-31J でデコード
1-29 815C EM DASH U+2014
(EM DASH)
U+2015
(HORIZONTAL BAR)
1-33 8160 WAVE DASH U+301C
(WAVE DASH)
U+FF5E
(FULLWIDTH TILDE)
1-34 8161 DOUBLE VERTICAL LINE U+2016
(DOUBLE VERTICAL LINE)
U+2225
(PARALLEL TO)
1-61 817C MINUS SIGN U+2212
(MINUS SIGN)
U+FF0D
(FULLWIDTH HYPHEN-MINUS)
1-81 8191 CENT SIGN ¢ U+00A2
(CENT SIGN)
U+FFE0
(FULLWIDTH CENT SIGN)
1-82 8192 POUND SIGN £ U+00A3
(POUND SIGN)
U+FFE1
(FULLWIDTH POUND SIGN)
2-44 81CA NOT SIGN ¬ U+00AC
(NOT SIGN)
U+FFE2
(FULLWIDTH NOT SIGN)


この差異については、いろいろと意見がありますが、a) 当初明確なマッピングが規定されていなかったこと、b) 波ダッシュ (〜) の例示字体が上下反転であったこと、c) ASCII に対応する文字が JIS X 0208 に一部存在しないこと、d) IBM 等の文字集合に半角の ¢、£、¬ が別途存在すること、などが要因としてあると思います。

4-7. JIS X 0213 の符号化方式

本節では、JIS X 0213 の符号化方式について説明します。
JIS X 0212 での失敗を踏まえて、JIS X 0213 では、Shift_JIS による符号化方式を含めて「参考」として定義されましたが、Unicode の普及が進んだため、JIS X 0213 の文字集合は Unicode に引き継がれたものの、符号位置、符号化方式はあまり使われていません。

漢字用8ビット符号

JIS X 0213 単独で符号化する最もシンプルな符号化方式です。
1文字が8ビット×2バイトの固定幅となるため、2バイト固定のデータ項目で利用可能です。
英数字は ASCII が使えないため、JIS X 0213 の対応する文字を使用します。

JIS X 0213 の1面 を GL に、2面を GR に呼び出して固定します。区点番号に1面は 0x2020 を、2面は 0xA0A0 を加えるとバイト列になります。

文字 A 𣖔
区点 1-3-33 1-13-1 1-16-1 2-15-10
変換方法 ↓+0x2020 ↓+0x2020 ↓+0x2020 ↓+0xA0A0
バイト列 23 41 2D 21 30 21 AF AA

ISO-2022-JP-2004

ISO-2022-JP の JIS2004 対応版です。
ただし、包摂基準が変更された文字 (「鴎」「神」など) はそれ以前の文字集合で使うことができません。また、JIS X 0208 の文字を JIS X 0213 のエスケープシーケンスで保存すると、ISO-2022-JP としては読めなくなります。

文字集合 バッファ 16進表記 文字表記 領域
ASCII (ISO/IEC 646 IRV) G0 1B 28 42 ESC ( B GL
JIS X 0208:1990 (制限あり) G0 1B 24 42 ESC $ B GL
JIS X 0213:2000 の1面 (制限あり) G0 1B 24 28 4F ESC $ ( O GL
JIS X 0213:2004 の1面 G0 1B 24 28 51 ESC $ ( Q GL
JIS X 0213:2000 の2面 G0 1B 24 28 50 ESC $ ( P GL

以下のように符号化します。

(表は横にスクロールしてご覧ください)

文字 A 𣖔
区点 (41) 1-13-1 1-16-1 2-15-10
変換方法 ↓そのまま JIS X 0213
の1面を指示
↓+0x2020 ↓+0x2020 JIS X 0213
の2面を指示
↓+0x2020 ASCII へ戻す
バイト列 41 1B 24 28 51 2D 21 30 21 1B 24 28 50 2F 2A 1B 28 42

EUC-JIS-2004

EUC-JP の JIS2004 対応版です。
JIS X 0212 の文字を使っていなければ、EUC-JP のデータを EUC-JIS-2004 で読み込むことは可能です。

文字集合 バッファ 16進 文字 領域
ASCII (ISO/IEC 646 IRV) G0 GL
JIS X 0213 の1面 G1 GR
JIS X 0201 の片仮名文字集合 (非推奨) G2 8E SS2 GR
JIS X 0213 の2面 G3 8F SS3 GR

以下のように符号化します。

(表は横にスクロールしてご覧ください)

文字 A (SS2) (SS3) 𣖔
区点 (41) (B1) 1-13-1 1-16-1 2-15-10
変換方法 ↓そのまま 1文字だけ半角片仮名 ↓そのまま ↓+0xA0A0 ↓+0xA0A0 1文字だけ2面 ↓+0xA0A0
バイト列 41 8E B1 AD A1 30 21 8F AF AA

Shift_JIS-2004

Shift_JIS の JIS2004 対応版です。
1面の変換式は Shift_JIS と同じです。2面の変換式は省略します。

文字 A 𣖔
区点 (41) (B1) 1-13-1 1-16-1 2-15-10
変換方法 ↓そのまま ↓そのまま ↓変換 ↓変換 ↓変換
バイト列 41 B1 87 40 88 9F F4 49

Shift_JIS のデータを Shift_JIS-2004 で読み込むことは可能です。

データ 41 B1 88 9F
Shift_JIS で読み込み (41) (B1) 16-1
文字 A
Shift_JIS-2004 で読み込み (41) (B1) 1-16-1
文字 A

Windows-31J のデータを Shift_JIS-2004 で読み込んだ場合、JIS X 0201、JIS X 0208、(「∑」を除く) NEC特殊文字は正しく読み込むことができますが、IBM拡張文字、NEC選定IBM拡張文字は他の文字に文字化けします。逆に Shift_JIS-2004 のデータを Windows-31J で読み込んだ場合も、同様に文字化けが発生します。

データ 87 40 EE 62 FB 7E ED 5B F4 49
Windows-31J で読み込み 13-1 91-35 117-63 89-28 103-10
文字 倞× (ユーザー外字)×
Shift_JIS-2004 で読み込み 1-13-1 1-91-35 2-91-63 1-89-28 2-15-10
文字 藭× 阳× 𣖔

4-8. EBCDIC

符号化文字集合の章でも書きましたが、EBCDIC は機種ごとの差異が大きく、符号化文字集合と文字符号化方式も明確に分けられていません。ラテン文字と漢字の切り替えはベンダーごとに切り替えのシフトコードを定義しているようです。

4-9. Unicode (ISO/IEC 10646, JIS X 0221) の符号化方式

本節では、Unicode (ISO/IEC 10646, JIS X 0221) の符号化方式を紹介します。

UTF-32

32ビットの1符号化文字を1符号単位で表す固定幅文字符号化方式です。
Unicode の有効ビット数が21なので、特に変換等は不要で、上位ビットを0で埋めれば UTF-32 になります。
ただし、未使用のビットが多いため、メモリ効率が悪く、あまり利用されません。

文字 A 𣖔
Unicode U+0041 U+FF71 U+2460 U+4E9C U+23594
変換方法 ↓そのまま ↓そのまま ↓そのまま ↓そのまま ↓そのまま
ビット列 00000041 0000FF71 00002460 00004E9C 00023594

32ビットをバイト列に変換する場合、上位バイトを先に置く「ビッグエンディアン (big endian)」か、下位バイトを先に置く「リトルエンディアン (little endian)」か、決める必要があります。
符号化方式を単に UTF-32 と指定した場合、データの先頭に「バイト順マーク (BOM: Byte Order Mark)」を付けて、バイト順を指定します。

00 00 FE FF で始まる場合、ビッグエンディアンと判定できます。

(表は横にスクロールしてご覧ください)

文字 (BOM) A 𣖔
Unicode U+FEFF U+0041 U+FF71 U+2460 U+4E9C U+23594
変換方法 ↓上位から ↓上位から ↓上位から ↓上位から ↓上位から ↓上位から
バイト列 00 00 FE FF 00 00 00 41 00 00 FF 71 00 00 24 60 00 00 4E 9C 00 02 35 94


また、FF FE 00 00 で始まる場合、リトルエンディアンと判定できます。

(表は横にスクロールしてご覧ください)

文字 (BOM) A 𣖔
Unicode U+FEFF U+0041 U+FF71 U+2460 U+4E9C U+23594
変換方法 ↓下位から ↓下位から ↓下位から ↓下位から ↓下位から ↓下位から
バイト列 FF FE 00 00 41 00 00 00 71 FF 00 00 60 24 00 00 9C 4E 00 00 94 35 02 00


BOM がない場合は、ビッグエンディアンがデフォルトとなります。
UTF-32BE、UTF-32LE と明示的にバイト順を指定することもでき、この場合は BOM を付けません。

UTF-16 (RFC 2781)

16ビットの1符号化文字を1~2符号単位で表す可変幅文字符号化方式です。
Windows 98 以降や Java の内部コードとして利用されます。

U+0000~U+FFFF はそのまま符号化します。U+10000~U+10FFFF は以下の方式で2文字に分割して表現します (サロゲートペア)。面番号を -1 しているのは、BMP (0面) はサロゲートペアに変換する必要がないので、少しでも収録可能面数を増やすための工夫かと思います。Unicode の最大値 U+10FFFF は UTF-16 で表現できる最大値から制約を受けています。

UTF-16

文字 A 𣖔
Unicode U+0041 U+FF71 U+2460 U+4E9C U+23594
変換方法 ↓そのまま ↓そのまま ↓そのまま ↓そのまま ↓変換
ビット列 0041 FF71 2460 4E9C D84D DD94

UTF-32 と同様に、符号化方式を単に UTF-16 と指定した場合、データの先頭に「バイト順マーク (BOM: Byte Order Mark)」を付けて、バイト順を指定します。

FE FF で始まる場合、ビッグエンディアンと判定できます。

(表は横にスクロールしてご覧ください)

文字 (BOM) A 𣖔
Unicode U+FEFF U+0041 U+FF71 U+2460 U+4E9C U+23594
変換方法 ↓上位から ↓上位から ↓上位から ↓上位から ↓上位から ↓変換後上位から
バイト列 FE FF 00 41 FF 71 24 60 4E 9C D8 4D DD 94


FF FE で始まる場合、リトルエンディアンと判定できます。

(表は横にスクロールしてご覧ください)

文字 (BOM) A 𣖔
Unicode U+FEFF U+0041 U+FF71 U+2460 U+4E9C U+23594
変換方法 ↓下位から ↓下位から ↓下位から ↓下位から ↓下位から ↓変換後下位から
バイト列 FF FE 41 00 71 FF 60 24 9C 4E 4D D8 94 DD


BOM がない場合は、ビッグエンディアンがデフォルトとなります。
UTF-16BE、UTF-16LE と明示的にバイト順を指定することもでき、この場合は BOM を付けません。

UTF-8 (RFC 3629)

8ビットの1符号化文字を1~4符号単位で表す可変幅文字符号化方式です。
ファイルやデータ連携など、外部コードとして利用されます。

007F は ASCII と互換性があり、ASCII のデータを UTF-8 で正しく読み込むことができます。
2バイト以上の場合、ASCII と同じビット列が現れることはなく、プログラムの不正動作や文字化けに強い符号化方式と言えます。複数バイトの形式でより小さいバイト数のデータを表現することもできますが、セキュリティ上の問題から、下限を設けて、最小のバイト数でのみ符号化を許可しています。

UTF-8

文字 A 𣖔
Unicode U+0041 U+FF71 U+2460 U+4E9C U+23594
変換方法 ↓そのまま ↓変換 ↓変換 ↓変換 ↓変換
バイト列 41 EF BD B1 E2 91 A0 E4 BA 9C F0 A3 96 94

UTF-8 の亜種

基本多言語面 (BMP) 以外の追加面を UTF-8 に変換する場合、符号位置からそのまま変換するのが本来の仕様ですが、サロゲートペアを UTF-8 に変換する実装が Oracle 8 以前など一部にあります。この符号化方式は、CESU-8 (Compatibility Encoding Scheme for UTF-16: 8-Bit) と呼ばれます。

文字 A 𣖔
Unicode U+0041 U+FF71 U+2460 U+4E9C U+23594
変換方法 ↓そのまま ↓そのまま ↓そのまま ↓そのまま ↓変換
UTF-16 0041 FF71 2460 4E9C D84D DD94
変換方法 ↓そのまま ↓変換 ↓変換 ↓変換 ↓変換
CESU-8 41 EF BD B1 E2 91 A0 E4 BA 9C ED A1 8D ED B6 94

また、UTF-8 はバイト単位の符号化方式のため、本来 BOM は不要ですが、Microsoft 製品を中心に、文字コード判定の目印として BOM を付ける実装が存在します。例えば、Excel で CSV を読み込む場合、BOM がついていると自動で UTF-8 と判断してくれます。 ただし、BOM が付いていることでエラーになるソフトウェアも存在するので、原則として不要な BOM は付けるべきではありません。

(表は横にスクロールしてご覧ください)

文字 (BOM) A 𣖔
Unicode U+FEFF U+0041 U+FF71 U+2460 U+4E9C U+23594
変換方法 ↓変換 ↓そのまま ↓変換 ↓変換 ↓変換 ↓変換
バイト列 EF BB BF 41 EF BD B1 E2 91 A0 E4 BA 9C F0 A3 96 94

4-10. 半角と全角

ASCII または JIS X 0201 と、JIS X 0208、JIS X 0213 を同時に符号化したとき、英数字などラテン文字や片仮名が複数の符号位置で重複して使用できることになります。
1バイトで符号化される ASCII、JIS X 0208 の文字を「半角」、2バイトで符号化される JIS X 0208、JIS X 0213 の文字を「全角」と俗に呼びます。これは、初期のコンピュータで、半角文字を全角文字の半分の幅で表示したことに由来し、現在ではあまり正確な表現ではありませんが、便宜上、本記事でもこの用語を使用します。

半角文字と全角文字が同時に符号可能な場合、ラテン文字については半角、片仮名については全角を使うことが推奨されています。Unicode では、全角のラテン文字、半角の片仮名は「半角・全角形」と呼ばれる U+FF00~U+FFEF の領域に配置されています。

半角 (推奨) 全角 (互換用)
ASCII 文字 Unicode JIS X 0208 文字 Unicode
31 1 U+0031 3-17 U+FF11
41 A U+0041 3-33 U+FF21
半角 (互換用) 全角 (推奨)
JIS X 0201 文字 Unicode JIS X 0208 文字 Unicode
B1 U+FF71 5-2 U+30A2
B6 DE ガ U+FF76 U+FF9E 5-12 U+30AC

ところで、ASCII のいくつかの記号について、JIS X 0208 では対応する全角文字が1対1で定義されていませんでした。すなわち、JIS X 0208 は ASCII の上位互換ではなく、「漢字用7ビット符号」でこれらの文字を使用したい場合は、類似の文字に置き換える必要があります。マイクロソフト標準キャラクタセット、JIS X 0213 では対応する全角文字が定義されています。

(表は横にスクロールしてご覧ください)

半角 全角
ASCII 文字 Unicode JIS X
0208
W31J JIS X
0213
文字 Unicode
22 U+0022
(QUOTATION MARK)
115-24
(92-94)
1-2-16 U+FF02
(FULLWIDTH QUOTATION MARK)
1-15 1-15 1-1-15 ¨ U+00A8
(DIAERESIS)
1-40 1-40 1-1-40 U+201C
(LEFT DOUBLE QUOTATION MARK)
1-41 1-41 1-1-41 U+201D
(RIGHT DOUBLE QUOTATION MARK)
1-77 1-77 1-1-77 U+2033
(DOUBLE PRIME)
27 U+0027
(APOSTROPHE)
115-23
(92-93)
1-2-15 U+FF07
(FULLWIDTH APOSTROPHE)
1-13 1-13 1-1-13 ´ U+00B4
(ACUTE ACCENT)
1-38 1-38 1-1-38 U+2018
(LEFT SINGLE QUOTATION MARK)
1-39 1-39 1-1-39 U+2019
(RIGHT SINGLE QUOTATION MARK)
1-76 1-76 1-1-76 U+2032
(PRIME)
2D - U+002D
(HYPHEN-MINUS)
1-61 1-2-17 U+FF0D
(FULLWIDTH HYPHEN-MINUS)
1-30 1-30 1-1-30 U+2010
(HYPHEN)
1-61 1-1-61 U+2212
(MINUS SIGN)
7E ~ U+007E
(TILDE)
1-33 1-2-18 U+FF5E
(FULLWIDTH TILDE)
1-33 1-1-33 U+301C
(WAVE DASH)


  • W31J: マイクロソフト標準キャラクタセット (Windows-31J)

4-11. 符号化方式と文字集合

各符号化方式と使用可能な文字集合を一覧で整理しました。

符号化方式と文字集合

  • ◎: 100% 利用可能 (Unicode については符号位置を除く)
  • ○: ほぼ利用可能 (一部使用不可または符号位置が非互換)
  • △: 一部の文字のみ使用可能
  • -: 使用不可

4-12. 符号化の例

各符号化方式で、具体的にどのように符号化されるか並べてみました。
符号化可能な文字が異なるため、各行の文字列は必ずしも同じではありません。

5. Unicode に関する補足

本章では、Unicode に関して、知っておいた方がよい補足情報を解説します。

5-1. 合成・分解

Unicode では、例えば「ガ」という片仮名を U+30AC という1つの符号位置で表すこともできますが、「カ」と「゛」に分けて、U+30AB U+3099 と2つの符号位置で表すこともできます。これは、「カ」と「゛」の2つの文字が並んでいるわけではなく、表示や処理を行う上では1つの文字として扱います。

「ガ」を「カ」と「゛」に分ける操作を「分解 (Decomposition)」、「カ」と「゛」を「ガ」に合わせる操作を「合成 (Composition)」と呼びます。また、合成された文字を「合成済み文字 (Precomposed Character)」、分解されたとき、ベースとなる文字を「基底文字 (Base Character)」、基底文字に付加される文字を「結合文字 (Combining Character)」、基底文字と結合文字 (複数可) で表された列を「結合文字列 (Combining Character Sequence)」と呼びます。
ここで、濁点 (゛) の符号位置は通常の U+309B ではなく、結合文字専用の U+3099 です。

分解・合成

JIS X 0213 文字 Unicode 備考
1-4-12 U+30AC 合成済み文字
ガ U+30AB U+3099 結合文字列

JIS X 0213 で追加された鼻濁音の「カ゚ (1-5-87)」は、Unicode では1つの符号位置が与えられなかったため、結合文字列 U+30AB U+309A で表す必要があります。このような文字が JIS X 0213 には25個あります。

JIS X 0213 文字 Unicode 備考
1-5-87 カ゚ U+30AB U+309A 結合文字列

※ ISO/IEC 10646、JIS X 0221 では Composition も Combining も「合成」と訳していますが、紛らわしいので、本記事では Unicode の訳語に合わせて、Composition を「合成」、Combining を「結合」と訳します。

5-2. Unicode 正規化

異体字、半角・全角、合成・分解などの話をしてきましたが、テキストに同じ意味を表す文字や文字の並びが存在すると、比較や検索処理で不都合が生じます。
そこで同じ意味を表す文字や文字の並びを統一的な表現に変換する正規化という処理が必要になります。Unicode では以下の4つの正規化形式が提供されています。
正準等価性の方がより狭く厳密な等価性で、互換等価性の方がより広く緩い等価性です。互換等価であれば同時に正準等価ですが、逆は必ずしも成り立ちません。

名称 説明
NFD (Normalization Form Canonical Decomposition) 正準等価性により分解
NFC (Normalization Form Canonical Composition) 正準等価性により分解後、再度合成
NFKD (Normalization Form Compatibility Decomposition) 互換等価性により分解
NFKC (Normalization Form Compatibility Composition) 互換等価性により分解後、正準等価性により合成

「ガ」も「カ+゛」も NFD で正規化すると「カ+゛」に、NFC で正規化すると「ガ」に変換されます。「ア」は NFD、NFC どちらで正規化しても「ア」で変化しません。

NFD・NFC

また、半角・全角どちらの「A」も NFKD、NFKC で正規化すると、半角の「A」に変換されます。半角の「ガ」も全角の「ガ」、「カ+゛」も NFKD で正規化すると全角の「カ+゛」に、NFKC で正規化すると全角の「ガ」に変換されます。また、ローマ数字の「Ⅵ」は NFKD、NFKC で正規化すると、半角のラテン文字の並び「VI」に変換されます。

NFKC・NFKC

これで一件落着と行きたいところですが、「Å (U+212B, オングストローム)」は NFC で正規化すると「Å (U+00C5, 上リング付きA)」という別の文字に変換されてしまいます。JIS X 0208 に「Å (U+212B, オングストローム)」は含まれますが、「Å (U+00C5, 上リング付きA)」は含まれないため、JIS X 0208 しか扱えないシステムで障害の原因となります。
また、「神 (U+FA19, 旧字体)」は「CJK互換漢字」という他の文字コードとの互換性を保証する場合のみ使用できる特別な漢字で、NFD、NFC で正規化するとやはり「神 (U+795E, 新字体)」という別の文字に変換されてしまいます。「神 (U+795E, 新字体)」も「神 (U+FA19, 旧字体)」も人名用漢字 (後述) のため、書き分けていた文字が同じ文字になってしまいます。
NFKC、NFKD についても、先ほどの説明では、全角英数字を半角に変換したり、半角片仮名を全角に変換するのに使えそうと期待してしまいますが、「 ̄ (U+FFE3, 全角マクロン)」を NFKC で正規化しても「¯ (U+00AF, マクロン)」や「‾ (U+203E, オーバーライン)」になってくれず、結合文字列になってしまいます。
単独の濁点「゛」も、NFKC で正規化すると結合文字列になってしまいます (NFC、NFD では分解されません)。

Unicode正規化の問題

以上のことから、文字の形式を揃えたいからとむやみに正規化を行うのは避けた方が無難です。
しかしながら、無条件に NFC や NFD で正規化するシステムも存在し、知らないうちに別の文字に変換されていたという現象も発生するらしいです。
「NFDC、NFC は文字の合成・分解のみ行い、異体字の変換はしないでほしい」とか「合成・分解のみ行う正規化を別途定義してほしい」などとも思いますが、現状はこのようになっています。
システム開発での具体的な対応方法については、次回考察したいと思います。

5-3. 異体字セレクタ

JIS X 0213 や Windows-31J には CJK互換漢字 で定義されている文字が存在し、正規化を行うと別の文字に変換されてしまいます。また、Unicode で同じ符号位置を振られている文字で、より細かい字体や字形の差を表現したいというニーズも存在します。
そこで、既存の符号位置に「異体字セレクタ (Variation Selector)」という符号を付加して、より詳細な字体や字形を表現する仕組みが導入されました。

異体字セレクタには「標準異体字シーケンス (SVS: Standardized Variation Sequence)」と「漢字異体字シーケンス (IVS: Ideographic Variation Sequence)」の2種類が存在します。
SVS は非漢字や CJK互換漢字 で使用され、追加はユニコードコンソーシアムが行っています。IVS は漢字専用で、定められた手続きで申請すれば、漢字異体字データベース (IVD: Ideographic Variation Database) に登録することができます。

日本語関連では、以下の異体字シーケンスが登録されています。

  • SVS
    • CJK互換漢字対応するもの (1002通り)
  • IVS
    • Adobe-Japan1 コレクション (14683通り)
    • 汎用電子情報交換環境整備プログラムの Hanyo-Denshi コレクション (13045通り)
    • 文字情報基盤整備事業の Moji_Joho コレクション (11384通り)

Hanyo-Denshi と Moji_Joho は多くのシーケンスを共有しているようです。

JIS X 0213 文字 Unicode 分類 備考
1-31-32 U+795E 基底文字
(神󠄁) U+795E U+E0101 IVS Adobe-Japan1 CID+2566
(神󠄂) U+795E U+E0102 IVS Hanyo-Denshi JA3132、
Moji_Joho MJ018811
1-89-28 (U+FA19) CJK互換漢字
(神︀) U+795E U+FE00 SVS
(神󠄀) U+795E U+E0100 IVS Adobe-Japan1 CID+8580
(神󠄃) U+795E U+E0103 IVS Hanyo-Denshi JC8928、
Moji_Joho MJ030211
  • ( ) 内の文字は異体字セレクタ未対応の環境では正しく表示されない。

まだまだ、異体字セレクタに対応したアプリケーション、システムは少ないですが、CJK互換漢字の正規化の問題は、異体字セレクタで解決する方向に進むかもしれません。

6. 改行の扱い

同じ文字コードでも、環境によって改行を表す文字が異なるため、異なる経路から入力されたデータを扱う場合は注意が必要です。

(表は横にスクロールしてご覧ください)

略語 名称 ASCII Unicode エスケープシーケンス 説明
LF 改行 0A U+000A \n Unix系OS (Linux、macOS 等)
CR+LF 復帰+改行 0D 0A U+000D U+000A \r\n Windows、MS-DOS、HTTP 等
CR 復帰 0D U+000D \r Mac OS 9 以前

7. JIS 以外の国内標準

本章では JIS 以外の文字に関する国内標準を見ていきます。これらは、JIS 規格を制定するうえでも重要な指針となっています。

7-1. 当用漢字・常用漢字

当用漢字は、1946年、国語審議会の答申に基づき、「現代国語を書き表すために、日常使用する漢字の範囲」として、内閣告示された漢字の一覧です。

常用漢字は、1981年、当用漢字に代えて、「法令、公用文書、新聞、雑誌、放送など、一般の社会生活において、現代の国語を書き表す場合の漢字使用の目安」として、内閣告示された漢字の一覧です。

制定年 文字数 教育漢字 概要
1946年 1850 当用漢字表」告示。
1948年 881 「当用漢字別表」で「教育漢字」を指定。「当用漢字音訓表」公布。
1949年 「当用漢字字体表」公布。
1958年 「学年別漢字配当表」公布。
1968年 996 「教育漢字」の備考欄に115字を追加 (備考漢字)。
1973年 「当用漢字改定音訓表」公布。
1977年 「学年別漢字配当表」に備考漢字を割り当て。
1981年 1945 常用漢字表」告示。95字追加、「燈」を「灯」に字体変更。
1989年 1006 「教育漢字」に20字追加、10字削除。
2010年 2136 「改定常用漢字表」告示。196字追加、5字削除。
2017年 1026 「教育漢字」に都道府県名に含まれる20字を追加。

7-2. 人名用漢字

日本の戸籍において、当用漢字、常用漢字以外で、子供の名前として記載できる漢字です。常用漢字以外の漢字を「表(一)」に、常用漢字の異体字を「表(二)」に掲載しています。

制定年 表(一) 表(二) 概要
1951年 92 92字を人名用漢字として指定。
1976年 120 28字を追加。
1981年 166 (205) 常用漢字に取り入れられた8字を削除、54字を追加。「人名用漢字許容字体表」公布。
1990年 284 118字を追加。
1997年 285 「琉」を追加。
2004年 290 「曽」、「獅」、「毘・瀧・駕」を追加。
774 209 488字追加、許容字体を表(二)として人名用漢字に統合。
2009年 776 「祷・穹」を追加。
2010年 649 212 常用漢字表に追加された129字を削除 (うち3字の異体字を表(二)へ移動)。常用漢字表から削除された5字を追加。
2015年 650 「巫」を追加。
2017年 651 「渾」を追加。

7-3. 表外漢字字体表

2000年、国語審議会により答申された、常用漢字とともに使われることが比較的多いと考えられる1022字について、その印刷標準字体を示したものです。
当用漢字・常用漢字における新字体の採用、JIS83 における常用漢字以外への俗字体・略字体の採用 (拡張新字体) に対して、表外漢字字体表では概ね「康煕字典体 (旧字体)」が採用されています。ただし、22字については、「現行のJIS規格や新聞など、現実の文字生活で使用されている俗字体・略字体等の中から、使用習慣・使用頻度等を勘案し、印刷標準字体と入れ替えて使用しても基本的には支障ないと判断し得る印刷文字字体」として「簡易慣用字体」が併せて提示されました。 また、部首として「辶」「示」「𩙿」を持つ44字については、「辶」「礻」「飠」を用いている場合も、字形の変更を求めないとされています (3部首許容)。

2010年、表外漢字字体表のうち、154字が常用漢字に追加され、「曽」「痩」「麺」の3字については簡易慣用字体が、それ以外の151字については印刷標準字体が通用字体とされました。 また、2004年以降、表外漢字字体表のうち、354字が人名用漢字に追加され、「芦」の1字のみ簡易慣用字体、それ以外の353字は印刷標準字体が採用されました。ただし、「禱」については、2009年に「祷」も使用可能となっています。

8. まとめと次回の予告

システム開発で必要となる標準規格の話、連載第1回は文字コードの概要について説明しました。多岐にわたる説明となりましたが、以下の内容を理解していただければと思います。

  • 「符号化文字集合」で文字集合と符号位置を定義し、「符号化方式」でバイト表現に変換していること。
  • 日本では、しばらく文字集合 JIS X 0208 を、ISO-2022-JP、EUC-JP、Shift_JIS の符号化方式で利用してきたこと。
  • 近年は、世界中の文字が扱える Unicode が主流となっており、UTF-8、UTF-16 などの符号化方式があること。
  • 常用漢字、人名用漢字に限っても、字体を正確に扱おうとすると、JIS X 0208 の範囲では不十分であり、JIS X 0213、Unicode、サロゲートペア、Unicode正規化、異体字セレクタ等の知識が必要になること。

次回は、実践編として、プログラミングでの扱い方、システム開発において特に注意すべき問題点と対策案を説明したいと思います。

A1. JIS漢字コードの変遷

A1-1. JIS83 制定時の注意すべき変更点

記号、罫線素片の追加 (71字)

∈ ∋ ⊆ ⊇ ⊂ ⊃ ∪ ∩ ∧ ∨ ¬ ⇒ ⇔ ∀ ∃
∠ ⊥ ⌒ ∂ ∇ ≡ ≒ ≪ ≫ √ ∽ ∝ ∵ ∫ ∬
Å ‰ ♯ ♭ ♪ † ‡ ¶ ◯

─ │ ┌ ┐ ┘ └ ├ ┬ ┤ ┴ ┼ ━ ┃ ┏ ┓ ┛
┗ ┣ ┳ ┫ ┻ ╋ ┠ ┯ ┨ ┷ ┿ ┝ ┰ ┥ ┸ ╂

第1水準と第2水準で字体の入れ替え (22組)

(表は横にスクロールしてご覧ください)

第1水準 第2水準 備考
区点 JIS JIS78 JIS83 Unicode 区点 JIS JIS78 JIS83 Unicode
16-19 3033 U+9BF5 82-45 724D U+9C3A
18-9 3229 U+9D2C 82-84 7274 U+9DAF
19-34 3342 U+86CE 73-58 695A U+8823
19-41 3349 U+64B9 57-88 5978 U+652A
19-86 3376 U+7AC3 67-62 635E U+7AC8
20-35 3443 U+6F45 62-85 5E75 U+704C
20-50 3452 U+8ACC 75-61 6B5D U+8AEB
23-59 375B U+981A 80-84 7074 U+9838
25-60 395C U+783F 66-72 6268 U+7926
28-41 3C49 U+854A 73-2 6922 U+8602
31-57 3F59 U+976D 80-55 7057 U+9771
33-8 4128 U+8CCE 76-45 6C4D U+8CE4
36-59 445B U+58F7 52-68 5464 U+58FA
37-55 4557 U+783A 66-74 626A U+792A
37-78 456E U+68BC 59-77 5B6D U+6AAE
37-83 4573 U+6D9B 62-25 5E39 U+6FE4
38-86 4676 U+8FE9 77-78 6D6E U+9087
39-72 4768 U+877F 74-4 6A24 U+8805
41-16 4930 U+6867 59-56 5B58 U+6A9C 人名用漢字 (2004)
43-89 4B79 U+4FAD 48-54 5056 U+5118
44-89 4C79 U+85AE 73-14 692E U+85EA
47-22 4F36 (篭) U+7BED 68-38 6446 U+7C60 常用漢字 (2010)


  • 「籠」は印刷標準字体を常用漢字に採用。
  • 「桧」「檜」はどちらも人名に使用可能。

字体の変更と、従来の字体の符号位置追加 (4組)

(表は横にスクロールしてご覧ください)

既存の文字 追加された文字 備考
区点 JIS JIS78 JIS83 Unicode 区点 JIS JIS83 Unicode
22-38 3646 U+5C2D 84-1 7421 U+582F 人名用漢字
43-74 4B6A U+69D9 84-2 7422 U+69C7 人名用漢字
45-58 4D5A U+9065 84-3 7423 U+9059 人名用漢字
64-86 6076 U+7476 84-4 7424 (瑤) U+7464 人名用漢字


  • 「瑶」は簡易慣用字体のみ人名に使用可能、他はどちらも使用可能。

字体の変更 (約300字)

「鷗」→「鴎」など。
「A1-3. JIS2000 制定時の注意すべき変更点 > JIS78 の字体の復活」参照。

A1-2. JIS90 制定時の変更点

人名用文字の追加 (2字)

既存の文字 追加された文字 備考
区点 JIS 文字 Unicode 区点 JIS 文字 Unicode
49-59 515B U+51DB 84-5 7425 U+51DC 人名用漢字 (1990)
63-70 5F26 (煕) U+7155 84-6 7426 U+7199 人名用漢字 (1990)
  • 「熙」は追加された文字のみ人名に使用可能、「凜」「凛」はどちらも使用可能。

A1-3. JIS2000 制定時の注意すべき変更点

JIS78 の字体の復活 (29字)

(表は横にスクロールしてご覧ください)

JIS83 の字体 (簡易慣用字体) JIS78 の字体復活 (印刷標準字体) 備考
面区点 JIS 文字 Unicode 面区点 JIS 文字 Unicode
1-16-2 3022 U+5516 1-15-08 2F28 U+555E
1-17-75 316B (焔) U+7114 1-87-49 7751 U+7130 人名用漢字 (2004)
1-18-10 322A (鴎) U+9D0E 1-94-69 7E65 U+9DD7 人名用漢字 (2004)
1-19-90 337A U+565B 1-15-26 2F3A U+5699
1-22-02 3622 (侠) U+4FA0 1-14-26 2E3A U+4FE0 人名用漢字 (2004)
1-22-77 366D U+8EAF 1-92-42 7C4A U+8EC0
1-24-20 3834 U+9E78 1-94-74 7E6A U+9E7C
1-25-77 396D U+9EB9 1-94-79 7E6F U+9EB4
1-28-40 3C48 U+5C61 1-47-64 4F60 U+5C62
1-29-11 3D2B (繍) U+7E4D 1-90-22 7A36 U+7E61 人名用漢字 (2004)
1-30-53 3E55 (蒋) U+848B 1-91-22 7B36 U+8523 人名用漢字 (2004)
1-30-63 3E5F (醤) U+91A4 1-92-89 7C79 U+91AC 人名用漢字 (2004)
1-32-70 4066 (蝉) U+8749 1-91-66 7B62 U+87EC 人名用漢字 (2004)
1-33-63 415F U+63BB 1-84-86 7476 U+6414
1-34-45 424D U+9A28 1-94-20 7E34 U+9A52
1-35-29 433D (箪) U+7BAA 1-89-73 7969 U+7C1E 人名用漢字 (2004)
1-37-22 444F (掴) U+63B4 1-84-89 7479 U+6451 人名用漢字 (2004)
1-37-22 4536 (填) U+586B 1-15-56 2F58 U+5861 常用漢字 (2010)
1-37-31 453F (顛) U+985B 1-94-03 7E23 U+985A 人名用漢字 (2004)
1-37-88 4578 U+7977 1-89-35 7943 U+79B1 人名用漢字 (2004)
1-38-34 4642 U+6D9C 1-87-29 773D U+7006
1-39-25 4739 U+56A2 1-15-32 2F40 U+56CA
1-40-14 482E U+6E8C 1-87-09 7729 U+6F51
1-40-16 4830 U+9197 1-92-90 7C7A U+91B1
1-43-43 4B4B (頬) U+982C 1-93-90 7D7A U+9830 常用漢字 (2010)
1-44-45 4C4D U+9EBA 1-94-80 7E70 U+9EB5 常用漢字 (2010)
1-45-73 4D69 (莱) U+83B1 1-91-06 7B26 U+840A 人名用漢字 (2004)
1-47-25 4F39 (蝋) U+874B 1-91-71 7B67 U+881F 人名用漢字 (2004)
1-58-25 5A39 U+6505 1-85-06 7526 U+6522


  • 「麺」は簡易慣用字体を、他は印刷標準字体を常用漢字に採用。
  • 「祷」「禱」はどちらも人名に使用可能、他は印刷標準字体のみ使用可能。

常用漢字、人名用漢字への包摂基準非適用による文字追加 (104字)

# 常用漢字 (既存の文字)
概郷研瓶併戻
慨喝褐既殺塚頻塀免隆
# 常用漢字の旧字体 (人名用漢字以外) (追加された文字)
槪鄕硏甁倂戾 (CJK統合漢字)
慨喝褐既殺塚頻塀免隆 (CJK互換漢字)

# 人名用漢字(二)
# 常用漢字 (既存の文字)
縁横温渇寛虚薫掲撃黄黒緒渉状瀬巣増即徴徳晩歩毎頼緑
涙暦歴錬郎録
逸謁禍悔海漢祈器響勤謹穀祉視社者煮臭祝暑署諸祥神節
祖僧層憎贈嘆著懲都突難梅繁卑碑賓敏侮福勉墨欄虜類練
朗廊
# 常用漢字の異体字 (追加された文字)
緣橫溫渴寬虛薰揭擊黃黑緖涉狀瀨巢增卽徵德晚步每賴綠
淚曆歷鍊郞錄 (CJK統合漢字)
逸謁禍悔海漢祈器響勤謹穀祉視社者煮臭祝暑署諸祥神節
祖僧層憎贈嘆著懲都突難梅繁卑碑賓敏侮福勉墨欄虜類練
朗廊 (CJK互換漢字)

# 人名用漢字(一)
# 人名用漢字 (既存の文字)
渚猪琢祐禎
# 人名用漢字の異体字 (追加された文字)
渚猪琢祐禎 (CJK互換漢字)

CJK互換漢字については、「A2-4. CJK互換漢字とNFC、異体字シーケンス」参照。

A1-4. JIS2004 制定時の注意すべき変更点

表外漢字字体表への対応に伴う、UCS互換のための文字追加 (10字)

(表は横にスクロールしてご覧ください)

既存の文字 (簡易慣用字体) 追加された文字 (印刷標準字体) 備考
面区点 JIS 文字 Unicode 面区点 JIS 文字 Unicode
1-22-70 3666 U+5036 1-14-1 2E21 U+4FF1 人名用漢字 (2004)
1-39-77 476D (剥) U+5265 1-15-94 2F7E U+525D JIS78 の字体の復活
常用漢字 (2010)
1-28-24 3C38 U+53F1 1-47-52 4F54 𠮟 U+20B9F 常用漢字 (2010)
1-38-61 465D U+5451 1-47-94 4F7E U+541E 人名用漢字 (2004)
1-17-19 3133 U+5618 1-84-7 7427 U+5653
1-53-11 552B U+598D 1-94-90 7E7A U+59F8
1-54-2 5622 U+5C4F 1-94-91 7E7B U+5C5B JIS78 の字体の復活
1-54-85 5675 U+5E76 1-94-92 7E7C U+5E77
1-33-73 4169 U+75E9 1-94-93 7E7D U+7626 JIS78 の字体の復活
常用漢字 (2010)
1-23-50 3752 U+7E4B 1-94-94 7E7E U+7E6B JIS78 の字体の復活


  • 「痩」は簡易慣用字体を、「剝」は印刷標準字体を常用漢字に採用。
  • 「倶」「叱」「呑」 についてはデザイン差の扱い。

A2. Unicode に関するさらなる補足

A2-1. 追加面に収録された JIS X 0213 第3水準漢字 (26字)

JIS X 0213 文字 Unicode UTF-16 備考
1-14-2 𠀋 U+02000B D840 DC0B 「丈」の異体字
1-15-34 𡈽 U+02123D D844 DE3D 「土」の異体字
1-15-44 𡌛 U+02131B D844 DF1B 「野」の異体字
1-15-64 𡑮 U+02146E D845 DC6E
1-15-91 𡢽 U+0218BD D846 DCBD
1-47-52 𠮟 U+020B9F D842 DF9F 常用漢字 (2010)、「叱 (U+53F1)」はデザイン差
1-47-67 𡚴 U+0216B4 D845 DEB4 「山女 (あけび)」の合字、「妛」の正字
1-47-78 𡸴 U+021E34 D847 DE34
1-85-26 𣇄 U+0231C4 D84C DDC4
1-85-82 𣗄 U+0235C4 D84D DDC4
1-86-9 𣜿 U+02373F D84D DF3F
1-86-18 𣝣 U+023763 D84D DF63
1-86-64 𣳾 U+023CFE D84F DCFE 「泰」の異体字
1-87-76 𤟱 U+0247F1 D851 DFF1
1-88-94 𥒎 U+02548E D855 DC8E
1-89-9 𥔎 U+02550E D855 DD0E 「崎」の異体字
1-89-39 𥝱 U+025771 D855 DF71 1024 を表す数の単位 (じょ)
1-89-52 𥧄 U+0259C4 D856 DDC4
1-89-78 𥶡 U+025DA1 D857 DDA1
1-90-61 𦫿 U+026AFF D85A DEFF
1-91-19 𦹀 U+026E40 D85B DE40
1-91-41 𧃴 U+0270F4 D85C DCF4
1-91-76 𧚄 U+027684 D85D DE84
1-92-41 𨉷 U+028277 D860 DE77
1-92-49 𨏍 U+0283CD D860 DFCD
1-94-70 𪆐 U+02A190 D868 DD90

A2-2. 結合文字列で表現する必要がある JIS X 0213 非漢字 (25字)

JIS X 0213 文字 Unicode 備考
1-4-87 か゚ U+304B U+309A 鼻濁音の「が」
1-4-88 き゚ U+304D U+309A 鼻濁音の「ぎ」
1-4-89 く゚ U+304F U+309A 鼻濁音の「ぐ」
1-4-90 け゚ U+3051 U+309A 鼻濁音の「げ」
1-4-91 こ゚ U+3053 U+309A 鼻濁音の「ご」
1-5-87 カ゚ U+30AB U+309A 鼻濁音の「ガ」
1-5-88 キ゚ U+30AD U+309A 鼻濁音の「ギ」
1-5-89 ク゚ U+30AF U+309A 鼻濁音の「グ」
1-5-90 ケ゚ U+30B1 U+309A 鼻濁音の「ゲ」
1-5-91 コ゚ U+30B3 U+309A 鼻濁音の「ゴ」
1-5-92 セ゚ U+30BB U+309A アイヌ語の CE
1-5-93 ツ゚ U+30C4 U+309A アイヌ語の TU
1-5-94 ト゚ U+30C8 U+309A アイヌ語の TO
1-6-88 ㇷ゚ U+31F7 U+309A アイヌ語の P
1-11-36 æ̀ U+00E6 U+0300 グレーブアクセント付き æ
1-11-40 ɔ̀ U+0254 U+0300 グレーブアクセント付き ɔ
1-11-41 ɔ́ U+0254 U+0301 アキュートアクセント付き ɔ
1-11-42 ʌ̀ U+028C U+0300 グレーブアクセント付き ʌ
1-11-43 ʌ́ U+028C U+0301 アキュートアクセント付き ʌ
1-11-44 ə̀ U+0259 U+0300 グレーブアクセント付き ə
1-11-45 ə́ U+0259 U+0301 アキュートアクセント付き ə
1-11-46 ɚ̀ U+025A U+0300 グレーブアクセント付き ɚ
1-11-47 ɚ́ U+025A U+0301 アキュートアクセント付き ɚ
1-11-69 ˩˥ U+02E9 U+02E5 声調記号上昇調
1-11-70 ˥˩ U+02E5 U+02E9 声調記号下降調

A2-3. NFC で符号位置が変換される非漢字 (3字)

(表は横にスクロールしてご覧ください)

元の文字 NFC 備考
JIS X 0213 文字 Unicode JIS X 0213 文字 Unicode
1-2-82 U+212B
(ANGSTROM SIGN)
1-9-28 Å U+00C5
(LATIN CAPITAL LETTER A WITH RING ABOVE)
JIS X 0208
→ JIS X 0213
1-11-39 U+1F71
(GREEK SMALL LETTER ALPHA WITH OXIA)
ά U+03AC
(GREEK SMALL LETTER ALPHA WITH TONOS)
JIS X 0213
→ 対応なし
1-11-49 U+1F73
(GREEK SMALL LETTER EPSILON WITH OXIA)
έ U+03AD
(GREEK SMALL LETTER EPSILON WITH TONOS)
JIS X 0213
→ 対応なし

A2-4. CJK互換漢字とNFC、異体字シーケンス (86字)

(表は横にスクロールしてご覧ください)

CJK互換漢字 NFC 異体字シーケンス (SVS) 備考
W31J JIS X 0213 文字 Unicode JIS X 0213 文字 Unicode 文字 Unicode
115-92
(89-64)
1-15-55 U+FA10 1-36-45 U+585A (塚︀) U+585A U+FE00 常用漢字
(旧字体)
116-58
(90-30)
U+FA12 1-32-18 U+6674 (晴︀) U+6674 U+FE00 当用漢字
(1946)
116-66
(90-38)
1-85-46 U+F929 1-47-15 U+6717 (朗︀) U+6717 U+FE00 人名用漢字
117-25
(90-91)
1-87-58 U+FA15 1-14-55 U+51DE (凞︀) U+51DE U+FE00
117-31
(91-03)
1-87-79 U+FA16 1-35-86 U+732A (猪︀) U+732A U+FE00 人名用漢字
117-54
(91-26)
U+FA17 1-17-55 U+76CA (益︀) U+76CA U+FE00
117-62
(91-34)
U+FA18 1-46-73 U+793C (礼︀) U+793C U+FE00 当用漢字
(1946)
117-63
(91-35)
1-89-28 U+FA19 1-31-32 U+795E (神︀) U+795E U+FE00 人名用漢字
117-64
(91-36)
1-89-29 U+FA1A 1-30-45 U+7965 (祥︀) U+7965 U+FE00 人名用漢字
117-66
(91-38)
1-89-33 U+FA1B 1-42-1 U+798F (福︀) U+798F U+FE00 人名用漢字
117-70
(91-42)
U+FA1C 1-44-87 U+9756 (靖︀) U+9756 U+FE00
117-73
(91-45)
U+FA1D 1-32-26 U+7CBE (精︀) U+7CBE U+FE00
117-82
(91-54)
U+FA1E 1-17-9 U+7FBD (羽︀) U+7FBD U+FE00 当用漢字
(1946)
118-1
(91-67)
2-87-24 U+FA20 1-91-36 U+8612 (蘒︀) U+8612 U+FE00
118-11
(91-77)
1-92-14 U+FA22 1-29-84 U+8AF8 (諸︀) U+8AF8 U+FE00 人名用漢字
118-22
(91-88)
U+FA25 1-16-79 U+9038 (逸︀) U+9038 U+FE00
118-25
(91-91)
1-92-74 U+FA26 1-37-52 U+90FD (都︀) U+90FD U+FE00 人名用漢字
118-75
(92-47)
1-93-61 U+F9DC 1-46-20 U+9686 (隆︀) U+9686 U+FE00 常用漢字
(旧字体)
118-88
(92-60)
U+FA2A 1-40-51 U+98EF (飯︀) U+98EF U+FE00
118-89
(92-61)
U+FA2B 1-27-84 U+98FC (飼︀) U+98FC U+FE00
118-91
(92-63)
U+FA2C 1-20-59 U+9928 (館︀) U+9928 U+FE00
119-10
(92-76)
U+FA2D 1-36-65 U+9DB4 (鶴︀) U+9DB4 U+FE00
1-14-24 U+FA30 1-41-78 U+4FAE (侮︀) U+4FAE U+FE00 人名用漢字
1-14-41 U+FA31 1-33-46 U+50E7 (僧︀) U+50E7 U+FE00 人名用漢字
1-14-48 U+FA32 1-44-40 U+514D (免︀) U+514D U+FE00 常用漢字
(旧字体)
1-14-67 U+FA33 1-42-57 U+52C9 (勉︀) U+52C9 U+FE00 人名用漢字
1-14-72 U+FA34 1-22-48 U+52E4 (勤︀) U+52E4 U+FE00 人名用漢字
1-14-78 U+FA35 1-40-60 U+5351 (卑︀) U+5351 U+FE00 人名用漢字
1-15-12 U+FA36 1-19-69 U+559D (喝︀) U+559D U+FE00 常用漢字
(旧字体)
1-15-15 U+FA37 1-35-18 U+5606 (嘆︀) U+5606 U+FE00 人名用漢字
1-15-22 U+FA38 1-20-79 U+5668 (器︀) U+5668 U+FE00 人名用漢字
1-15-58 U+FA39 1-42-29 U+5840 (塀︀) U+5840 U+FE00 常用漢字
(旧字体)
1-15-62 U+FA3A 1-43-47 U+58A8 (墨︀) U+58A8 U+FE00 人名用漢字
1-47-65 U+FA3B 1-33-56 U+5C64 (層︀) U+5C64 U+FE00 人名用漢字
1-47-66 U+FA3C 1-54-05 U+5C6E (屮︀) U+5C6E U+FE00
1-84-14 U+F928 1-47-13 U+5ECA (廊︀) U+5ECA U+FE00 人名用漢字
1-84-48 U+FA3D 1-18-89 U+6094 (悔︀) U+6094 U+FE00 人名用漢字
1-84-60 U+FA3E 1-19-20 U+6168 (慨︀) U+6168 U+FE00 常用漢字
(旧字体)
1-84-62 憎 U+FA3F 1-33-94 U+618E (憎︀) U+618E U+FE00 人名用漢字
1-84-65 U+FA40 1-36-08 U+61F2 (懲︀) U+61F2 U+FE00 人名用漢字
1-85-8 U+FA41 1-41-50 U+654F (敏︀) U+654F U+FE00 人名用漢字
1-85-11 U+FA42 1-20-91 U+65E2 (既︀) U+65E2 U+FE00 常用漢字
(旧字体)
1-85-35 U+FA43 1-29-75 U+6691 (暑︀) U+6691 U+FE00 人名用漢字
1-85-69 U+FA44 1-39-63 U+6885 (梅︀) U+6885 U+FE00 人名用漢字
1-86-27 U+F91D 1-45-83 U+6B04 (欄︀) U+6B04 U+FE00 人名用漢字
1-86-41 U+F970 1-27-6 U+6BBA (殺︀) U+6BBA U+FE00 常用漢字
(旧字体)
1-86-73 U+FA45 1-19-4 U+6D77 (海︀) U+6D77 U+FE00 人名用漢字
1-86-87 U+FA46 1-29-77 U+6E1A (渚︀) U+6E1A U+FE00 人名用漢字
1-87-5 U+FA47 1-20-33 U+6F22 (漢︀) U+6F22 U+FE00 人名用漢字
1-87-53 U+FA48 1-28-49 U+716E (煮︀) U+716E U+FE00 人名用漢字
1-88-5 U+FA4A 1-34-86 U+7422 (琢︀) U+7422 U+FE00 人名用漢字
1-89-7 U+FA4B 1-40-74 U+7891 (碑︀) U+7891 U+FE00 人名用漢字
1-89-19 U+FA4C 1-28-50 U+793E (社︀) U+793E U+FE00 人名用漢字
1-89-20 U+FA4D 1-27-67 U+7949 (祉︀) U+7949 U+FE00 人名用漢字
1-89-23 U+FA4E 1-21-7 U+7948 (祈︀) U+7948 U+FE00 人名用漢字
1-89-24 U+FA4F 1-45-20 U+7950 (祐︀) U+7950 U+FE00 人名用漢字
1-89-25 U+FA50 1-33-36 U+7956 (祖︀) U+7956 U+FE00 人名用漢字
1-89-27 U+FA51 1-29-43 U+795D (祝︀) U+795D U+FE00 人名用漢字
1-89-31 U+FA52 1-18-50 U+798D (禍︀) U+798D U+FE00 人名用漢字
1-89-32 U+FA53 1-36-87 U+798E (禎︀) U+798E U+FE00 人名用漢字
1-89-45 U+FA54 1-25-82 U+7A40 (穀︀) U+7A40 U+FE00 人名用漢字
1-89-49 U+FA55 1-38-45 U+7A81 (突︀) U+7A81 U+FE00 人名用漢字
1-89-68 U+FA56 1-32-65 U+7BC0 (節︀) U+7BC0 U+FE00 人名用漢字
1-90-14 U+FA57 1-46-93 U+7DF4 (練︁) U+7DF4 U+FE01 人名用漢字
1-90-19 U+FA59 1-40-43 U+7E41 (繁︀) U+7E41 U+FE00 人名用漢字
1-90-26 U+FA5A 1-29-80 U+7F72 (署︀) U+7F72 U+FE00 人名用漢字
1-90-36 U+FA5B 1-28-52 U+8005 (者︀) U+8005 U+FE00 人名用漢字
1-90-56 U+FA5C 1-29-13 U+81ED (臭︀) U+81ED U+FE00 人名用漢字
1-91-7 U+FA5F 1-35-88 U+8457 (著︀) U+8457 U+FE00 人名用漢字
1-91-47 U+F936 1-46-26 U+865C (虜︀) U+865C U+FE00 人名用漢字
1-91-79 U+FA60 1-19-76 U+8910 (褐︀) U+8910 U+FE00 常用漢字
(旧字体)
1-91-89 U+FA61 1-27-75 U+8996 (視︀) U+8996 U+FE00 人名用漢字
1-92-15 U+FA62 1-17-58 U+8B01 (謁︀) U+8B01 U+FE00 人名用漢字
1-92-16 U+FA63 1-22-64 U+8B39 (謹︀) U+8B39 U+FE00 人名用漢字
1-92-24 U+FA64 1-41-48 U+8CD3 (賓︀) U+8CD3 U+FE00 人名用漢字
1-92-29 U+FA65 1-34-3 U+8D08 (贈︀) U+8D08 U+FE00 人名用漢字
1-92-57 U+FA67 1-16-79 U+9038 (逸︁) U+9038 U+FE01 人名用漢字
1-93-67 U+FA68 1-38-81 U+96E3 (難︀) U+96E3 U+FE00 人名用漢字
1-93-86 U+FA69 1-22-33 U+97FF (響︀) U+97FF U+FE00 人名用漢字
1-93-91 U+FA6A 1-41-49 U+983B (頻︀) U+983B U+FE00 常用漢字
(旧字体)
1-94-4 U+F9D0 1-46-64 U+985E (類︀) U+985E U+FE00 人名用漢字
2-80-9 U+FA49 2-80-10 U+722B (爫︀) U+722B U+FE00
2-84-48 U+FA58 1-69-54 U+7E09 (縉︀) U+7E09 U+FE00
2-85-84 U+FA5D 2-85-86 U+8279 (艹︀) U+8279 U+FE00
2-85-85 U+FA5E 2-85-86 U+8279 (艹︁) U+8279 U+FE01
2-89-73 U+FA66 2-89-74 U+8FB6 (辶︀) U+8FB6 U+FE00


  • W31J: マイクロソフト標準キャラクタセット (Windows-31J)
  • ( ) 内の文字は異体字セレクタ未対応の環境では正しく表示されない。

A3. 参考文献・URL