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進数に置き換えたものとなる。
いいなと思ったらチップを贈って応援しよう!