駆け出しエンジニアとして本を読む日々を過ごしているものなのですが、最近本にやたら出てくるこいつ↓について簡単に調べてまとめました!
UTF-8ってよく聞くけど何なの?
日常的にプログラミングされる方であったら毎日のように見るかもしれません、UTF-8。
そもそもUTF-8について理解を深めるうえでこの世のエンコードの仕組みを理解せねばならないのです。
さあ、難しい言葉が早速出てきたのでそこから理解しましょう。
エンコード
そもそも、コンピューターが扱う言葉と人間が扱う言葉はそもそも異なります。エンコードによくお世話になる以下の2つのケースについて説明します。
URLエンコード
URLに日本語を含めた時
URLには基本的に日本語を埋め込むことはできません。
なので、日本語をエンコードすることで記号、英語、数字の組み合わせに変換してURLを発行します。
ほら、友人からLINEで送られてきたリンクがめっちゃ長文でキモいやつです!
話を戻しますが、例えば「東京,日本」をエンコードすると「%E6%9D%B1%E4%BA%AC%2C%E6%97%A5%E6%9C%AC」となります。
このように記号、英語、数字の組として表現され、正常にリクエストがサーバーに送信されることとなります。
文字エンコード
Python等でファイルを保存したり開いたりするとき
ご存じだと思いますが、コンピューターは数字でコミュニケーションを取ります。例えば、00101101などの二進数が基本となっています。
一方、人間が(コンピューターとの)会話で使うのは「こんにちは」「さようなら」などの文字ですよね。
なので、人間の意図を文字にしてそのままコンピューターに伝えたって伝わるわけがないのですよ、、泣
そこで、エンコード方式ごとに異なる文字(例:こんにちは)と数字(例:00101101)の対応表を正しいものに切り替えることを文字エンコードと呼びます。
以上2つの例を通してエンコーディングのイメージがつかめたかと思います。
上記で説明した、対応表について深堀りしていきます。
【重要】対応表は厳密には2つ存在する!
これは、URLエンコードと文字エンコードの2つというわけではなく、それぞれエンコードのプロセス内で2つの対応表を使うといったことです。(わかりずらいですね、、)
理由についてはこちらの記事が参考になるので興味ある方はぜひチェックしてみてください!
2つの表が、
- 符号化文字集合
- 文字符号化方式
と呼ばれるものです。「安心してください、説明しますよ!」(〇村)
符号化文字集合
人間が使う文字とその文字に対応するコンピューターが認識可能な番号(ゼロ以上の整数値)の対応表
Unicode, ISO-2020-JP, EUC-JP, Shift_JISなどがこれに該当します。
(Unicodeの例:「こんにちは」⇒(Unicodeを参照)⇒「\u3053\u3093\u306b\u3061\u306f」)
なので、省略して語られることの多いUnicodeは「Unicode文字集合」と呼ばれることもあります。
文字符号化方式
文字に対応するコンピューターが認識可能な番号(ゼロ以上の整数値)と実際にコンピューターが扱う数字(データ列)の対応表
この処理の対象は先ほどの文字に対応するコンピューターが認識可能な番号になります。それを実際に使うための具体的な数字(データ列)に落とし込みます。
UTF-8, UTF-16, UTF-32などがこれに該当します。
そう、この文字符号化方式の一種であるのが、あのUTF-8なんですよ!!!
最終的にこの2つのプロセスを踏んで、人間の使う文字⇒コンピューターが扱う数字への変換を行っているわけなんですね。
まとめ
- エンコードとは符号化文字集合と文字符号化方式の2つの対応表を用いた処理をまとめたもの。
- 符号化文字集合とはエンコードの前半の人間が使う文字とその文字に対応するコンピューターが認識可能な番号(ゼロ以上の整数値)の対応表。Unicode, ISO-2020-JP, EUC-JP, Shift_JISなど。
- 文字符号化方式とはエンコード後半の文字に対応するコンピューターが認識可能な番号(ゼロ以上の整数値)と実際にコンピューターが扱う数字(データ列)の対応表。UTF-8, UTF-16, UTF-32など。
- UTF-8はただの対応表のことだよ!!!
おまけ
パーセントエンコード
URLエンコードでも説明させていただきましたが、「%E6%9D%B1%E4%BA%AC%2C%E6%97%A5%E6%9C%AC」のようなキモいやつについて少し説明します。
このパーセントがアホみたいについたものをパーセントエンコードされた文字と呼びます。パーセントエンコード自体は全く難しくなく、何かしらの文字符号化方式を指定して、変換したデータ列に対して%を間につけていくだけです。
例えば、UTF-8で「東京,日本」をエンコードすると「E6 9D B1 E4 BA AC 2C E6 97 A5 E6 9C AC」となります。
このスペースに対して「%」を挿入すると「%E6%9D%B1%E4%BA%AC%2C%E6%97%A5%E6%9C%AC」となるわけです。
こちらのサイトが文字コードの変換を試せるサイトなのでぜひチェックしてみてください!
https://www.ahref.org/mojicode.php
https://tech-unlimited.com/urlencode.html
最後まで見ていただいてありがとうございました!間違っていることなどがございましたらご指摘いただけると幸いです!
ぜひ他の記事もチェックしてみてください~ではまた!