文字コードの基礎

符号化文字集合と文字符号化方式の違いについて

はじめに

文字コード周りは用語の意味が複雑で曖昧な使われ方をしていたりします。

ですので用語の意味を整理してみたいと思います。

文字コード


そもそも文字コードとはなんでしょうか。
Wikipediaで調べてみると、
「文字コードとはコンピュータ上で文字(キャラクタ)を利用する目的で各文字に割り当てられるバイト表現。
もしくは、バイト表現と文字の対応関係(文字コード体系)のことを指して「文字コード」と呼ぶことも多い。」とあります。
ちょっと分かりにくいですが、大まかに言えば文字コードとは「文字とコードとの対応規則をまとめたもの」といえます。
実際にコンピュータによって文字を処理するためには、0と1の組み合わせによって文字を符号化(エンコード)する必要があるからです。
基本的な理解としては、文字と数値をどのように対応させるかを定義した「ルールブック」と解釈すると分かりやすいかもしれません。

文字集合

文字コードを決める際には、文字集合(対象となる文字)を定めることが必須となります。
まず文字集合というのは「どのような文字を扱うか」ということを定義するものです。
これによって、そのシステムで扱える文字の種類が決定されます。
文字といってもアルファベット、ひらがな、カタカナ、数字、記号はもとより日本語には非常に多くの漢字が存在しています。
ここで「集合」という言葉は、数学の用語になぞらえて使用されています。
数学において、集合とは互いに区別できる要素の集まりを指します。
同様の意味合いで、文字の集まりを「文字集合」と呼ぶわけです。

符号化文字集合(文字コードセット)


文字コードは、先述した文字集合という概念の上に成り立っています。
符号化文字集合とは文字集合を定義し 、その集合の各文字に対応するビット組み合わせを一意に定めたものを文字コードといいます。
符号化文字集合(codedcharacterset)ともいいます。
「文字コード」と「符号化文字集合」は、ほぼ同じ意味だと思って差し支えありません。

さて、この文字コードセットにも様々な規格や種類があります。
文字コードセットは、日本語入力システムのMS-IMEで確認することができます。

20190926014253-00000278-imepad.jpg

UnicodeやシフトJIS、JIS X 0208といった文字コードによって独自の文字コードセットが作られていたり、または使い分けられています。
そして、文字コードセットによって、文字と対応する数値の組み合わせが決まるのですが、
日本語のコードの場合には、その数値がそのままの形でコンピュータに使用されることはほとんどなく、
目的や処理の方式によって、この数値が様々な方式で変換されて処理されます。
このように、データを目的に応じた形式(通常はビット列)に変換することを符号化(エンコード)と言います。

文字符号化方式

コンピューター上では最終的には全てが0と1のデジタルで表現されます。もちろん文字もそうです。
ですので符号化文字集合だけがあっても実際にそれをコンピュータ上ではどのような0,1の並びで表現するのか、
ということが決まっていないとコンピューターでは扱えません。その0,1の並びを定義しているのが文字符号化方式です。
符号化文字集合は複数ありますが、そのそれぞれの集合ごとに1つの文字符号化方式があるというわけではありません。
実際にはひとつの文字符号化方式で複数の符号化文字集合を対象にしていますし、
ひとつの符号化文字集合に対して複数の文字符号化方式が存在しています。
これが文字が読み取れなかったり、文字化けなどの原因となります。
日本語の文字符号化方式は一般に「ISO-2022-JP」、「Shift_JIS」、「EUC-JP」などがあります。
繰り返しになりますが、文字符号化方式は、符号化文字集合で定義された数値をどのように符号化するかのルールを決めたものです。
したがって、同じ符号化文字集合でも文字符号化方式によって異なる形式に符号化されることもあります。
一方、ASCII(アスキー)のような単純な文字コードでは、符号化文字集合で定義された数値(文字と数値を対応させた単純な整数値)を、
さらにエンコードする必要はなく、そのまま使うことができるので、ASCIIは「符号化文字集合」の意味でも用いられます。

20190926014623-00000278-20150913141538.jpg

まとめ

・文字コードと符号化文字集合はほぼ同義で、文字集合の各文字に対応するビット組み合わせを一意に定めたものです。

 JIS X 0208、Unicode 等があります。

・文字符号化方式は、符号化文字集合で定義された数値をコンピュータが解釈できるように

 0,1の並びにどのように符号化するかのルールを決めたものです。

 ひとつの符号化文字集合に対して複数の文字符号化方式が存在しています。

 EUC-JP、Shift_JIS、UTF-8、MS932 等があります。

 ここでは説明は省きますがShift_JIS≒CP932=MS932=Windows-31Jです。

・「Unicode」という「符号化文字集合」に対して「UTF-8」「UTF-16」などの「文字符号化」方式がある、

 同様に、「JIS X 0208」という「符号化文字集合」に対して「ISO-2022-JP」「EUC-JP」「Shift_JIS」などの「文字符号化」方式がある、
 という対応付けになるようです。

20190926014130-00000278-screenshot20190926005759jst.jpg

記事のサブ画像




コメント

コメントを追加

user-symbol

Stay in touch

ビジネスおよび開発者向けの実用的な最新情報をご希望ですか?

ソースコードプロジェクトに対するPieceXコミュニティのニーズについてご提供します。

PieceXの最新の無料コミュニティコードプロジェクトをいち早くお知らせします。