見出し画像

Unicodeとは何か

42 Tokyoの課題である「minitalk」のコードが完成した。

完成までに22.5時間を費やしたが、目安の時間が40時間なので、目安の約半分の時間で完成させることができた。

本日レビューを2つ受けたので、残りはラスト1回だけレビューを受けて、問題がなければ合格となる。

minitalkについて

今回取り組んだ課題の「minitalk」は簡単に言うと「一方方向のチャット」だ。

1つのプログラム(client)からもう1つのプログラム(server)へメッセージを送り、server側の画面にメッセージを表示させる。

データの送受信はシグナルを扱うので、シグナル関数を学ぶ課題だ。

ボーナス点がもらえるボーナス課題の中にはUnicodeの送受信、表示に対応せよというものがあり、Unicodeという単語は今まで聞いたことがあったが、具体的に何かは知らなかったので調べてみた。

Unicodeとは

Unicodeとは、「文字」と「文字に割り当てた番号」の対応表だ。

大前提として、コンピュータは「0」と「1」しか理解できない。

なので、「A」をコンピュータに理解できる数字に置き換えると「00001010」となる。

この間に、「U+0041」といった「文字に割り当てた番号」を通し番号として設定する。

(なぜ、わざわざ通し番号が必要なのかは今は説明しない)

まとめると、

「A」 ↔︎ 「U+0041」 ↔︎ 「00001010」

といった対応関係となる。

この「A」↔︎「U+0041」の対応表のことを「符号化文字集合」と呼ぶ。

そして、「U+0041」↔︎「00001010」の対応表のことを「文字符号化方式」と呼ぶ。

「符号化文字集合」は、「文字」と「文字に割り当てた番号」の対応表で、変換対象となる文字の一覧が書いてある表だ。

世界中の文字に対して、番号が割り当て、管理している集合体のことを指す。

「文字符号化方式」は、「文字に割り当てた番号」と「実際にコンピュータが扱う数字」の対応表だ。

それぞれに代表的なものをが以下となり、よく混合されるUnicodeとUTF-8が別ものだとわかる。

「符号化文字集合」:Unicode
「文字符号化方式」:UTF-7、UTF-8、UTF-16、UTF-32

「あ」の場合

ひらがなの「あ」にとって、「U+3042」がUnicodeで対応する番号となる。

この「U+3042」という数字がどのように割り出されているかを以下に図解した。

2進数で表記した場合、一番先頭(左端)の三つの「1」に注目してほしい。

先頭の「1」の数によって、何バイト分の表記なのかが表わす。
ここでは「1110」のひとまとまりで、「1」が3つ=3バイト分の表記だとわかる。

また、続くバイトの先頭では必ず「10」が表記される。

赤字で記載したこれら先頭の「1110」、「10」、「10」を除いた箇所で、「あ」に該当する番号を割り当てていく。

それは「0011 0000 0100 0010」となり、これら4つの数字のかたまりをそれぞれ10進数に置き換えると「3 0 4 2」となり、これがUnicodeで「あ」に対応する番号となる。

ちなみに「あ」をUTF-8で表すと「0xE3 0x81 0x82」となり、これは「あ」の2進数である「11100011 100000001 10000010 」を1バイト(8ビット)ごとに16進数に置き換えたものとなる。


画像1


mondにて匿名の質問・メッセージを募集しています。なんでも送ってね👍 https://mond.how/ja/hovinci_jp