[掲載 2023年12月23日] [更新 2024年02月15日]
各種の文字符号化方式の文字コード
動作確認等 Windows 10 ビルド 19043 Pro 64 bit







各種の文字符号化方式の文字コード


各種の文字符号化方式の文字コードの例です.JIS X 0208 の 16 区の文字だけを対象にしています.



[備考]
現在のコンピュータのデータは,全て 0, 1 で表現できるバイナリデータです.バイナリデータは,通常,16 進数で表します.
文字の場合,コンピュータ内部のデータ,つまり,メモリに記憶したり,ディスクに保存されているデータは,文字そのものではなく,文字コードの値です.その値を,どの文字符号化方式として処理するかによって結果が異なります.その違いが文字化けという現象です.

文字符号化方式を意識しなくても,文字符号化方式の違いによる文字化けを回避するために,多くのアブがこの違いを自動的に処理するようになっています.





01_同じ文字でも文字符号化方式が異なると文字コードは異なる


文字符号化方式 ISO-2022-JP, ShiftJIS, EUC-JP の文字コード表の一部です.
全て同じ文字のコード表です.同じ文字でも,文字符号化方式が異なると,文字コードが異なることが確認できます.

下表は,文字符号化方式 ISO-2022-JP の文字コードです.
ISO-2022-JP は,現在は拡張されていますが,日本語のインターネットメール (電子メール) 用の文字符号化方式として制定された規格です.この文字符号化方式における文字コードのことを JIS コードと言います.


JIS 0 1 2 3 4 5 6 7 8 9 A B C D E F
3020
3030
3040
3050
3060
3070


下表は,文字符号化方式 EUC-JP の文字コードです.
EUC-JP は,UNIX 用として AT&T (American Telephone & Telegraph Company) が策定して,UNIX 系の OS で使用されてきた文字符号化方式です.

UNIX 系の OS である Linux 系の各ディストリビューションでも使用されていました.


EUC-JP 0 1 2 3 4 5 6 7 8 9 A B C D E F
B0A0
B0B0
B0C0
B0D0
B0E0
B0F0


下表は,文字符号化方式 Shift_JIS の文字コードです.
現在の Shift_JIS は,マイクソフト策定し ANSI (American National Standards Institute : 米国国家規格協会) が制定した規格です.主に Windows で使用されてきた文字符号化方式です.

HP-UX, IBM の AIX, Solaris などの OS は,Shift_JIS も実装しました.
IBM は,自社製のコンピュータに IBM 拡張文字と呼ばれていた文字を実装していましたが,AIX では,NEC 拡張文字,NEC 特殊文字が含まれている,Windows と同じ Shift_JIS を採用しました.


Shift_JIS 0 1 2 3 4 5 6 7 8 9 A B C D E F
8890
88A0
88B0
88C0
88D0
88E0
88F0




02_同じ文字コードでも文字符号化方式が異なると文字は異なる


同じ文字でも,文字符号化方式が異なれば文字コードが違うのですから,当然,文字コードが同じでも,文字符号化方式が異なれば文字が違います.ただし,ISO-2022-jP, Shift_JIS, EUC-JP では,基本的に,互いに文字コードが重複しないように符号化しています.

次の表は,文字コードが上の ShiftJIS の表と同じ領域の UTF-16 の文字のリストです.この表には,Shift_JIS にはない文字があります.
このように,同じ文字コードでも,文字符号化方式が異なれば違う文字になります.

Shift_JIS の環境で作成したテキストを,エンコードの処理をしないで,Unicode の UTF-16 で文字を扱うアプリで表示すると,このことが原因で文字化けします.


UTF-16 0 1 2 3 4 5 6 7 8 9 A B C D E F
8890
88A0
88B0
88C0
88D0
88E0
88F0


文字コードが 88A0 から 88AF の文字は以下のようになっています.


88A0 + 0 1 2 3 4 5 6 7 8 9 A B C D E F
Shift_JIS
UTF-16


Windows 10 のメモ帳を起動して,上の表の Shift_JIS の文字を Shift_JIS (ANSI) で保存します.
保存したテキストを UTF-16LE として読み込むと以下のように文字化けします.

テキストを UTF-16 (UTF-16LE または UTF-16BE) で保存すると,先頭に BOM と呼ばれる識別用のデータが追加されます.テキストを UTF-16 として読み込む時は,先頭のデータをこの BOM と解釈して処理します.今回は Shift_JIS で保存していますから,ディスクに保存されているのは Shift_JIS の文字コードだけです.その結果,以下のように文字化けします.
UTF-16 は,2 バイト単位で文字コードを処理しますが,UTF-8 は可変長バイトの符号化です.その結果,UTF-8 の文字化けは以下のようになります (32 文字たが後半は省略).

これが,エンコードの処理がない時の現実です.
単純に,上の表のような別文字表示になるわけではありません.

多くのアプリは自動でエンコードの処理をしてくれれますから,実際にはこのような文字けが起こることは,ほとんどありません.Shift_JIS で保存したテキストは,Shift_JIS のテキストとして読み込んでくれます.このテストで使用している文字は,全て JIS X 0208 にある文字です.

 

Shift_JIS で保存 唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦
UTF-16 LE で読込み ꂈꆈꊈꎈꒈꖈꚈꞈꢈꪈꮈ겈궈꺈꾈
UTF-8 で読込み ������������������


帆にも,例えば,文字コードが 8740 から 874F の文字は以下のようになっています.
Mac-Japanese は,mac OS 9 まで使用されていた Apple 社独自の文字符号化方式です.この文字符号化方式は,現在は廃止されています.
ISO-2022-JP と EUC-JP には,これらの文字コートに相当する文字はありません.


8740 + 0 1 2 3 4 5 6 7 8 9 A B C D E F
Shift_JIS
Mac-Japanese
UTF-16


[備考]
Windows 10 の文字符号化方式は Unicode の UTF-16 です.したがって,Windows 10 のメモ帳に文字を入力する時は Shift_JIS 以外の文字も入力できます.Shift_JIS (ANSI) で保存すると,エンコードの処理が行われて,Shift_JIS にない文字は文字化けします.
Shift_JIS で保存した後でも,Shift_JIS 以外の文字は入力できます.





03_文字化けの文字


上の文字化けの表で,背景に色がある縦長の文字はジャワ文字です.コードポイント (文字コード) は U+A988 です.この文字は Javanese Text フォントに収録されています.このフォントは,Windows 10 には標準でインストールされています.
この文字は,Windows 10 に付属のメモ帳では,フォントを Javanese Text にしないと下部が描画されません.Microsoft Word 2019 であれば自動的にこのフォントを使用して描画します.

文字化けというのは,予期しない文字が表示される現象のことです.上の UTF-16 LE の場合,その多くは実際の文字です.例えば,1 番目と 6 番目の文字のコードポイントと収録フォントは以下のようになっています.
これらの文字はフォントにメイリオを指定していますが,フォントリンクの機能によって,これらのフォントを自動的に使用して描画しています.


文字 UTF-16 フォント 説明
U+A088 Microsoft Yi Ba 中国の雲南省,四川省などのイ族の文字.イ文字
U+A588 Ebrima ソマリ語の文字.ヴァイ文字


四角形のグリフはトーフ文字 (豆腐文字) と言って,そのコードポイントには登録されている文字がないか,描画用に指定したフォントにもフォントリンクのフォントにも文字がないことを意味しています.四角形にバツのグリフも同じです.
縦長のジャワ文字の両側の文字は,筆者の環境ではトーフ文字ですが,そのコードポイントの文字が収録されているフォントを使用すれば以下の文字になります.


UTF-16 文字 フォント 説明
U+A888 Noto Sans Saurashtra 縦長のジャワ文字の前の文字
インド南部のサウラーシュトラ語の文字
U+AA88 Noto Sans Tai Viet 縦長のジャワ文字の後の文字
ベトナム北西部,ラオス北部の言語の文字
タイ・ヴィエト文字


UTF-8 の文字化け は,読み込んだデータが UTF-8 の文字コードとして認識できないことを意味しています.この位置の文字コードは UTF-8 の EF BF BD になります.したがって,表示に使用するフォントを変更しても,この文字のままです.トーフ文字のように具体的な文字にはなりません.
UtF-8 以外の場合,その文字符号化方式の文字コードとして認識できない文字コードの時は,? という文字になります.

トーフ文字や四角にバツのグリフの位置の文字コードはそのままです.該当する文字の描画データがフォントファイルにない場合に,代替え文字としてトーフ文字や四角にバツのグリフを描画します.



[備考]
記事中の Noto XXX は,Google でか提供している Google Fonts のフォントです.
Noto は,No tofu (トーフ) の意味だそうです.Noto Sans XXX は,ゴシック体のようなセリフなしの文字,Noto Serif XXX は,明朝体のようなセリフ付きの文字です.





04_フォントにない文字コードの文字の代替グリフ


コードポイントに文字が登録されていないか,文字が登録されていてもフォントには収録されていない文字の場合,代わりに表示されるグリフには下図のようなものがあります.描画に使用するフォントによって異なるのですが,1 番目のトーフと 2 番目の四角にバツが多いようです.フォントによっては,何も描画しなかったり,半角または全角のスペースを描画する場合もあります.

下図は,U+1FBF0 - U+1FBF4 の文字を Windows 10 のメモ帳に,フォントを変えてテストしています.これらの文字は,Windows 10 に標準でインストールされているフォントには収録されていません.




図1

図2

図3

図4

図5

図6

テストに使用した文字は,以下の最初の 5 文字です.
これらの文字は,Noto Sans Symbols2 フォントを使用すると描画できます.


0 1 2 3 4 5 6 7 8 9 A B C D E F
1FBF0 🯰 🯱 🯲 🯳 🯴 🯵 🯶 🯷 🯸 🯹


この他,(U+3013) という文字が使われることがあります.これは「ダケ文字 (下駄文字)」と呼ばれています.ゲタ文字は,手書き文字の認識処理の結果,認識できなかった文字の代替え文字として使用されています.



[備考 1]
Firfox 121.0 の場合,トーフ文字の代わりに,矩形内にコードポイントの値を表示したグリフになります.


[備考 2]
トーフ文字と四角にバツのグリフは,フォント内部のデータで描画されるので具体的な文字コードはありません.似ている文字ならばあります.
それは,☐ U+2610, U+2612, U+25AF, U+303F などです. は,かな漢字変換で「ちぇっく」を変換すると変換候補に現れます.





05_UTF-8 の文字コード


上で,UTF-16 の文字コードが 8890 - 88FF の文字を掲載しました.同じ文字の UTF-8 の文字コードは以下のようになります.この文字の範囲では UTF-16 は 2 バイトですが,UTF-8 は 3 バイトの文字です.UTF-8 は,文字の種類によってバイト数が異なります.
Windows のシステムの文字符号化方式は UTF-16 です.mac OS X や UNIX 系の OS は UTF-8 です.Unicode の文字コード (コードポイント) を表示する時は,一般的に UTF-16 が使用されています.


UTF-8 0 1 2 3 4 5 6 7 8 9 A B C D E F
E8 A2 90
E8 A2 A0
E8 A2 B0
E8 A3 80
E8 A3 90
E8 A3 A0
E8 A3 B0