Unicode
https://gyazo.com/8b5d2326a698fb153f933f19dbb74408
世界中ほぼすべての文字を扱える文字集合
絵文字も使える
文字化けしない
学習リソース
#あとで読む
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) – Joel on Software
JavaScript has a Unicode problem · Mathias Bynens
Unicodeとは? その歴史と進化、開発者向け基礎知識 - Build Insider
4 byteになった経緯
1991年当初のUnicode(ver.1.0)では2 byte(0x0000 - 0xFFFF)の文字で世界中の文字を表現しようとした
1文字が2 byteの世界
固定長のエンコーディング方式UCS-2(Universal Character Set coded in 2 octets)
足りなくなった😱
1996年、1文字2 byteの世界を壊さずに、一部の文字を1文字4 byteにする方法(サロゲートペア)が考案された
UCS-2を拡張し、2または4 byteの可変長エンコーディングを採用したUTF-16になった
参考
サロゲートペア入門:CodeZine(コードジン)
UCS-2とUTF-8
ノーマライズにまつわる歴史
Unicodeには、ベースとなる文字に組み合わせて使うマーク(Combining Diacritical Marks)が定義されている
http://www.unicode.org/charts/PDF/U0300.pdf
ドイツ語のウムラウト記号とか
uとその上につける ¨で üを表現
例:é は 0x65 0xCC 0x81と表現できる
e(0x65)と́(0xCC 0x81)を組み合わせた表現
一方で、よく使われている文字は組み合わせ文字(composed character)が存在している
é は0xC3 0xA9で表現できる。
つまり、同じ文字é に複数の表現方法が存在する
table: éの2通りの表記法
表現方法 UTF-8 バイト数 codepoint codepointの数
composed character(é)を使う 0xC3 0xA9 2 U+00E9 1
combining diacriticalをeに組み合わせる 0x65 0xCC 0x81 3 U+0065(e) U+0301(́) 2
これらを同じ文字と扱うためのノーマライズの方法をUnicode Standardが提供している
NFC とか
参考
Counting characters — Twitter Developers
#文字コード