機種依存文字チェックを行う必要があり、その際に文字コードはなんのためにあるのか
どんな仕組みで文字が表示されるか明確にわかっていなかったので、概念理解のために調べたことをまとめてみました。
文字コードとは?
文字を表示するために必要なコード。
文字は、PC上ではビット列で管理されていて、これを文字コード(表)を用いて文字に変換することで表示しています。
この文字変換コードを隣のコードと合わせて読み込み誤認識したり、文字変換表にないビット列を読み込むと、「文字化け」になります。
符号化文字集合と符号化方式
文字コードは「文字符号化方式」を使って、ビット列をPCが読み取れるデータ列に変換します。
符号化文字集合
符号化文字集合 (coded character set) ,符号 (code) 文字集合を定め,かつ,その集合内の文字と ビット組合せとを 1 対 1 に関係付ける,あいまいでない規則の集合
日本語の符号化文字集合として重要なものを表にまとめました。
文字コード | 概要 | ビット桁数 | 収録文字数 | 規定文字 |
---|---|---|---|---|
ASCII | ラテン文字を中心とした文字コード | 7ビット単位1バイト | 128文字 | 英数字と一部の記号 |
JIS X 0201 | JISにおける最も古い文字コード | 7ビット及び8ビット単位1バイト | 192文字(制御文字:32文字)? | ラテン文字と片仮名 |
JIS X 0208(Shift-JIS) | 日本語基本文字コード規格 | 7ビット単位2バイト | 6,355字 | 基本文字コード 第1水準(2,965字)・第2水準(3,390字) |
JIS X 0213 | JIS X 0208の拡張規格 | 7ビット単位2バイト | 10,050字 | JIS X 0208へ第3水準(1,259字)・第4水準(2,436字)を追加した拡張規格 |
Unicode | 全世界の文字の収録を目的とした文字コード | 8ビット単位の1〜4バイト | ? | 日本語文字はほとんどをカバーしているが、一部含まれていない例外文字もある |
日本語の漢字の表示は、JIS X 0201 → JIS X 0208 → Unicodeと 符号化文字集合を作ることで
改善されてきた経緯があります。
ただ、現在もメール送付は、ISO-2022JP(JIS X 0208)の漢字を使う方法が主流です。
また、JIS X 0208に含まない第3・第4水準の漢字をメールに使うと文字化けする可能性があります。
文字符号化方式
文字符号化方式(もじふごうかほうしき、英: character encoding scheme、CES)とは、符号化文字集合で文>字に対応付けた非負整数値を、実際にコンピュータが利用できるデータ列(通常、バイト列)に変換する符号化方式。
一般的な文字コードは、この符号化方式にあたります。
Shift_JIS
EUC-JP(Unix系OS)
UTF-8
UTF-16
UTF-*は、Unicodeを実装。
Shift_JISやEUC-JPは、JIS X 02**を実装し、文字コードとして定義しています。
Shift_JISの別名称
Shift_JISの名称として他に、CP932、Windows-31J、MS932というものが存在しています。
ベンダーの独自拡張を統合した文字コードとして、名前がつけられており、システム開発時に
文字コードを指定する際に、別名称で指定する場合があります。
詳細は以下の表に記載しました。
文字コード | 説明 |
---|---|
Shift_JIS(CP932) | 1982年に作成されて日本語を表示できる文字コード |
CP932 | Shift_JISをマイクロソフトが独自拡張して、管理番号CP932とした文字コード |
Windows-31J(MS932) | IBM,NECが独自拡張したCP932を統合してWindows3.1日本語版発売時に作成した文字コード |
MS932 | IBM,NECが独自拡張した文字が統合されたShift-JISで、CP932と区別するためにつけられたWindows-31Jの別名称 |
機種依存文字
機種(OS)毎で、表示できたりできなかったりする文字です。
Windowsでは表示できるけど、Mac OSXでは表示できなかったりします。
Shift_JISでは、文字集合 JIS X 0208以降にIBMやNECなどによって独自拡張されたエリアの文字は機種依存文字となっている場合が多いです。
ただ、Unicodeの文字集合で実装された文字コード(UTF-8など)では、
Windowsなどで機種依存文字であっても、UTF-8は別機種でも異なるコードを指定することがないため、表示可能となっています。
未収録の文字に関しては、もちろん文字化けしてしまいますが。。
Shift_JISにおける機種依存文字
Shift_JISにおける以下のエリアは、誤認識して文字化けしたり、独自拡張された文字が存在しているエリアです。
この文字が使われていないかチェックすることでShit_JISにおける文字化けの多くを回避することができます。
禁止区域名 | Shift_JISコード | 説明 |
---|---|---|
半角カナ文字エリア | 00A0~00FF | 使用厳禁、ASCII コードと重複するエリア |
特殊文字エリア | 8540~889E | 機種依存文字の主なエリア |
縦文字エリア | EB40~EFFC | 第2水準漢字の後部(MacOS では縦書用文字、Windows では特殊な外字) |
外字エリア | F040~ | JIS外字エリア |
外字と内字
文字コード規格やフォントに収録されている文字を「内字」と呼びます。
それ以外の収録されていない文字は「外字」と呼ばれます。
Shift_JISにおいて外字エリアが存在しているが、このエリアは規格外の領域のため、機種依存文字が割り当てられている場合が多いです。
文字コードとフォント
もう一つ気になるのが、文字コードとフォントの関係。
どちらもデータ列から文字に変換する変換表という意味で共通しています。
ただ、以下のようにそもそも用途が異なり、種類数が全然違います。
文字コード:ビット列を文字として表示する。数種類しかない
フォント:ビット列を文字の形やデザインを考慮した文字として表示する。日本語でも数千以上存在する
文字化け
ここまで見てきた情報をまとめると、文字化けしないためには、以下を満たす必要があります。
- 送信元、先で同じ文字コードを扱っている
- 機種依存文字ではない
- 使用フォントの中に該当文字が実装されている
繰り返しになりますが、同じ文字コードでも機種依存文字は、機種(OS)毎にコードが異なるため、認識できない、もしくは別の文字が表示されてしまう場合があります。
フォント・フォールバック
ただフォント未実装に関する文字化けは、意識する必要はなくなってきています。
Windows、Mac OS Xなどの最新OSでは、
フォントに実装されていなくても、他のフォントに表示を代替させる仕組みを実装しています。
ただし、異なるフォントが使われ、思わぬ表示結果になることもあるため、その点は注意が必要です。