1. kasei-san

    Posted

    kasei-san
Changes in title
+Unicode, UTF についてひっかかったので色々メモ
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,88 @@
+もう[文字コード](http://qiita.com/kasei-san/items/cfb993786153231e5413)は[おなかいっぱい](http://qiita.com/kasei-san/items/3ce2249f0a1c1af1cbd2)なのですが...
+
+# Unicode と UTF の違い
+
+- Unicode : 符号化文字集合
+- UTF : 符号化方式
+
+符号化文字集合と、符号化方式についてはこちらを参照 -> [本当は怖くないCP932](http://qiita.com/kasei-san/items/cfb993786153231e5413#shift_jis-%E3%81%A3%E3%81%A6%E3%81%9D%E3%82%82%E3%81%9D%E3%82%82%E3%81%AA%E3%81%AB%E3%82%92%E6%8C%87%E3%81%99%E3%81%AE)
+
+# Unicode
+
+- 文字セットの切り替えなしに、世界中の文字を単一文字集合として扱う符号化文字集合規格
+- 21ビットの範囲(0x00000〜0x10FFFF)
+- 各文字の位置は先頭に `U+` をつけて表す( **Unicodeコードポイント** と呼ぶ)
+ - 例えば 🗿 ならば `U+1F5FF`
+
+# UTF-8, UTF-16, UTF-32 の違い
+
+## UTF-32
+
+- Unicodeコードポイントをそのままつかった符号化方式
+- 21ビットだと切りが悪いので、32ビット
+
+## UTF-16
+
+- 1文字16ビット
+- 16ビット以上の文字については、 **サロゲートペア** という仕組みで16ビットx2で表現
+
+### サロゲートペア
+
+- Unicode1.0では、16ビット固定で、2^16(=65,536)個に全ての文字を入れる計画だった
+ - U+0000〜U+FFFF
+ - 漢字圏のこと考えてねぇ...
+- 漢字入りきらねぇよ! ってなって、Unicode3.0で拡張された
+ - U+0000〜U+10FFFF
+- で、元々全て16ビットの範囲内に入ると思って作られたUTF-16だと入りきらない! となって、対応方法が検討された
+
+### サロゲートペアの方法
+
+- U+D800〜U+DFFF までには文字を割り当てない
+ - これらを **サロゲートコードポイント** と呼ぶ
+- U+D800〜U+DBFF を **上位サロゲート** と呼ぶ
+- U+DC00〜U+DFFF を **下位サロゲート** と呼ぶ
+- UTF-16では、上位サロゲートと下位サロゲートの組み合わせで、U+10000以降の文字を表現している
+- UTF-16専用の仕様であるが、これらの為にUnicodeがサロゲートコードポイントを策定しているので、他のUTFも影響を受けた
+ - サロゲートコードポイントには、当然どのUTFでも文字は宛てられていない
+
+## UTF-8
+
+- UTF-16の内、1バイトで表せる文字(ASCII)については、1バイトで表す( **ASCIIの上位互換** )
+- 残りについては、範囲に応じて 2バイト〜4バイト にエンコードする
+ - エンコード方法についてはこちらを参照 -> [UTF-8](http://exlight.net/devel/unicode/utf8.html)
+- 必要に応じて文字のバイト数が変動するので、容量の無駄が少ないのが特徴
+
+### UTF-8 mb4
+
+- 4バイト対応のUTF-8のこと
+- Unicode2系までは、UTF-8は最大3バイトだったので、3バイトまでしか対応していないUTF-8実装があった
+- 例えばMySQLは、5.5.33までは4バイト対応しておらず、後から追加された絵文字や追加漢字(𠮷とか)は格納できなかった
+
+# 絵文字についてメモ
+
+- 絵文字が追加されたのは、2010年の Unicode 6.0から
+- 以下のバージョン以降のOSは標準で対応している
+ - windows : 8以降
+ - MacOS : 10.7(Lion)以降
+ - それ以前のバージョンでも絵文字対応しているフォントを落とせば見れるらしい
+ - 参考 : [Help:特殊文字 - Wikipedia](https://ja.wikipedia.org/wiki/Help:%E7%89%B9%E6%AE%8A%E6%96%87%E5%AD%97#.E6.90.BA.E5.B8.AF.E9.9B.BB.E8.A9.B1.E3.81.AE.E7.B5.B5.E6.96.87.E5.AD.97)
+
+
+
+# その他色々
+
+- Microsoft Windows や Javaでは "Unicode" といえば **UTF-16 のリトルエンディアン** という暗黙の了解になっている。
+
+
+
+# 参考
+
+- https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
+- [Unicode - Wikipedia](https://ja.wikipedia.org/wiki/Unicode)
+- http://graphemica.com/%F0%9F%97%BF
+ - 文字コード毎の詳細情報が見れて便利
+
+## サロゲートペア関係
+- [Unicode のサロゲートペアとは何か - ひだまりソケットは壊れない](http://vividcode.hatenablog.com/entry/unicode/surrogate-pair)
+- [サロゲートペア入門:CodeZine(コードジン)](http://codezine.jp/article/detail/1592)
+