UTF-8って何?文字コードをざっくり理解する

f:id:endoakak:20200725103912j:plain

Railsアプリを作るときは必ず、database.ymlencoding: utf8mb4encoding: utf8に変更する指示があったり、HTMLファイルのheadには必ず<meta charset="UTF-8">と書いたり。
utf8ってなんなんだろうとずっと気になっていたので調べてみました。

UTF-8は世界で最もよく使われる文字コード

UTF-8は多くのソフトウェアで使われている文字コードだそうです。unicode用の符号化方式の一つで、ASCIIとの互換性が高いらしい…。

わからない言葉をひとつ調べたらわからない言葉がみっつに増えましたw

文字コードとは?

まずは文字コードから。

人間は様々な言語の様々な文字を使います。「あ」とか「#」のような記号とかいろいろ。
しかしコンピュータはそんなに多くの文字を識別できない、というか数値しか理解できないので、コンピュータが理解できるように文字を数値に変換する必要があります。

この変換のために各文字に割り当てられた数値が文字コードということみたいです。

unicodeとは?

unicodeを一言で言うと、世界中のすべての文字を一つの文字コードで表したものです。

UTF-8がよく使われる文字コードだということは、それ以外にも文字コードがたくさん存在するということです。ある文字コードで数値化したものを別の文字コードに変換しようとすると、うまく変換できず文字化けしてしまう可能性があります。

そういうことが起こらないように、すべての言語の文字を扱えるようにしようと作られたのがunicodeです。

仕組み

unicodeは、すべての文字にコードポイントという値を与えます。そしてそれを符号化方式によってコンピュータの扱える数値に変換します。この符号化方式の代表的なものが、UTF-8ということです。

例えば、

「あ」のコードポイントは「U+3042」で、これをUTF-8によって変換すると「0xe38182」になるらしいです。

ASCIIとは?

こちらは逆に、すごく限られた文字コードです。収録されているのはアルファベット、数字、一部の記号ぐらいです。まだまだコンピュータが広く普及していなかった頃から使われていたもので、基本的な文字コードとして今でも使われています。
というか、ASCIIを拡張していろいろな文字コードが作られたという感じかな。

UTF-8もアルファベットなどに関してはASCIIと同じコードを使っているので、ASCIIと互換性が高いらしいです。

おまけ utf8mb4について

utf8が3バイトで表しているのに対し、utf8mb4は4バイトまで使います。絵文字などを表示するのに4バイト必要らしいので、その場合はutf8mb4を使う必要があります。

まとめ

ざっくりはわかったけど厳密には間違ってるところもありそう。