ITエンジニア日記 ~NO SKILL, NO LIFE~

学んだ技術や、気になることをアウトプットしていきます。プログラミング, インフラ, etc...

文字コード ~ 文字集合 と 符号化方式 ~

今回は文字コードについて。文字集合と符号化方式に掘り下げて勉強してみました。

1. 文字コードとは

文字コードはコンピューター上で文字を扱うために、文字にや記号に割り当てられてた数値のこと。
この文字コードは「文字集合」と「符号化方式」というもので構成されている。

1.1. 文字集合

コンピューターではどのような文字を使うのか決めておく必要がある。この扱いたい文字をまとめた集合を文字集合と呼ぶ。
ASCIIやJIS、UNICODE文字集合です。

コンピューターで文字を表すために、文字集合の文字一つ一つにユニークな番号がふってあります。このユニークな番号のことを、コードポイントと呼ぶ。

1.2. 符号化方式

文字集合をデジタルデータとして表現するために、どうやって符号化するかを決めているのが符号化方式
符号化することによって、文字集合のコードポイント*1を実際にコンピューターが理解できるデータ列(バイト列)に変換されます。
Shift-JISやUTF-8UTF-16などが符号化方式です。

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

文字集合と符号化方式の関係をUNICODEUTF-8UTF-16で説明してみます。

UNICODE
 アルファベットや記号、数字、漢字、ひらがな、アラビア文字ラテン文字など世界中の文字を集めた文字集合

UTF-8, UTF-16
 UNICODEで定義されている文字をコンピューターが理解できるバイト列に符号化するための符号化方式。

ひらがなの「あ」を、UNICODEUTF-8UTF-16で表現すると下記のようになります。

符号化方式 文字 UNICODE
コードポイント
符号化
UTF-8 U+3042 0xE3 0x81 0x82
UTF-16 0x30 0x42

UTF-8UTF-16UNICODEという文字集合の符号化方式であるため、文字「あ」のコードポイントは同じです。
異なるのは、コンピューターが理解できるように符号化したあとのバイト列です。 UTF-8は「0xE3 0x81 0x82」の3byteのバイト列に対し、UTF-16は「0x30 0x42」の2byteのバイト列となっています。

3. ASCII

ASCII(アスキーコード)は、「文字集合のコードポイント」と、「符号化したあとのバイト列(コンピューターが理解できるバイト列)」が同じであるため、符号化方式を意識する必要がないとのこと。*2

4. まとめ

文字コードを掘り下げて、文字集合と符号化方式についてまとめてみました。
文字コードの世界はまだまだ奥深いけど今日はここまで。

参考

文字集合 :
https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E9%9B%86%E5%90%88
文字符号化方式 :
https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E7%AC%A6%E5%8F%B7%E5%8C%96%E6%96%B9%E5%BC%8F
文字コードUTF-8とは〜世界で最もポピュラーな文字コードとその仕組みを学ぼう :
https://ferret-plus.com/7006

*1:コードポイントは文字集合の文字に頭から順番に割り振った番号であり、符号化方式ではないので注意。

*2:https://ja.wikipedia.org/wiki/ASCII