🪬

文字コードの基礎・種類

2021/05/16に公開

文字コードとは

文字コードとは、「文字」や「記号」をコンピューターで扱うために、文字に個別に割り当てた「固有の数値」を指します。

コンピューターは 0 と 1 の組み合わせでしか理解できないので、「あいうえお」という文字を表現したい場合はコンピューターが理解できるコードで処理する必要があるのです。

例えば「あ」という文字を表現したい場合、「10001」という番号が割り当てられていたら、最終的には 2 進数に変換されてコンピュータで処理されます。

このような「文字に数値を割り当てたもの」を文字コードと呼びます。

文字コードの種類

文字コードにはそれぞれ種類があり、日本語を表す文字コードは JIS 、 Shift_JIS 、 UTF-8 などがあります。

  • ASCII ( アスキー )
    • 米国規格協会 ( ANSI ) によって定められた、基本的な文字コード
    • アルファベットと数字、あとはいくつかの記号のみで、1 文字を 7 ビットで表す
    • ASCIIコード表
  • EBCDIC(エビディック)
    • IBM 社が定めた文字コードで、8 ビットを使って 1 文字を表す
    • 大型の汎用コンピュータなどで使用される
  • シフト JIS コード [S-JIS]( エスジス )
    • ひらがなや漢字、カタカナなどが扱える日本語の文字コード
    • ACSII のコード体系の文字と混合させて使用できるようになっている
    • Windows でも使用されており、1 文字を 2 バイトで表す
    • 文字コード表
  • EUC ( イーユーシー )
    • UNIX という OS 上でよく使用される日本語の文字コードで、拡張 UNIX コードとも呼ばれる
    • 基本的には 1 文字を 2 バイトで表しますが、補助漢字などでは 3 バイト使用する
  • Unicode ( ユニコード )
    • 各国のありとあらゆる文字を 1 つのコード体系で表そうとした文字コード
    • 当初は 1 文字を 2 バイトで表していたが、文字数が足りなくなり 3 バイト、4 バイトと拡張されている
    • ISO/IEC 10646 として国際標準となっている
    • IT用語辞典 e-Words | Unicodeとは - IT用語辞典

Unix 系 OS 上のシェルでできるバイナリ体験例

テスト用にファイルを作成。

$ echo "hoge" > test.txt
$ echo "fuga" >> test.txt
$ cat test.txt
hoge
fuga

$ od -c test.txt
0000000   h   o   g   e  \\n   f   u   g   a  \\n
0000012

8 進数で表示。

$ od test.txt
0000000    067550  062547  063012  063565  005141
0000012

1 バイト単位の 16 進数で表示。

$ od -tx1 test.txt
0000000    68  6f  67  65  0a  66  75  67  61  0a
0000012

2 バイト単位の 16 進数で表示。

$ od -x test.txt
0000000      6f68    6567    660a    6775    0a61
0000012

1 バイト単位の 10 進数で出力。

$ od -tu1 test.txt
0000000   104 111 103 101  10 102 117 103  97  10
0000012

2 バイト単位の 10 進数で出力。

$ od -tu2 test.txt
0000000     28520   25959   26122   26485    2657
0000012

https://hydrocul.github.io/wiki/commands/od.html

UTF-8 などを進数に変換

  • VSCode で 16 進数に変換

  • 8〜16 進数を 2 進数(8、10 進数も可)に変換

    • Mac : Command + Space =>「計算機」と検索 => 表示をクリック => プログラマに変更

追記(2021-05-17)

文字コードの種類として一括りで紹介しましたが、その中でも符号化文字集合と符号化方式に区分されるようです。

符号化文字集合とは、日本後のひらがなやカタカナ、英語やドイツ語などの文字をどのように表現して使えるかをリスト化したようなものです。

符号化方式とは、符号化文字集合を表現するために、実際にコンピュータが利用できるデータ列(バイト、ビット)に変換する方式です。

符号化文字集合と符号化方式の対比

文字コード考え方から理解するUnicodeとUTF-8の違い | ギークを目指して より引用

Unicode は符号化文字集合で、 UTF-8 や UTF-16 は符号化方式となります。

ただし、サーバのパラメータ等では charset = UTF-8 と書かれたりするように、符号化文字集合 ( charset ) と符号化方式 ( character encoding ) を同じ意味で使うこともあります。

この 2 つの違いを理解しましょう。

参考

https://qiita.com/yuji38kwmt/items/b3a7820b4d3b544da4ff

https://ferret-plus.com/7006

http://equj65.net/tech/charcode/

Discussion