LoginSignup
31
31

More than 5 years have passed since last update.

Unicode, UTF についてひっかかったので色々メモ

Last updated at Posted at 2015-12-21

もう文字コードおなかいっぱいなのですが...

Unicode と UTF の違い

  • Unicode : 符号化文字集合
  • UTF : 符号化方式

符号化文字集合と、符号化方式についてはこちらを参照 -> 本当は怖くないCP932

Unicode

  • 文字セットの切り替えなしに、世界中の文字を単一文字集合として扱う符号化文字集合規格
  • 21ビットの範囲(0x00000〜0x10FFFF)
  • 各文字の位置は先頭に U+ をつけて表す( Unicodeコードポイント と呼ぶ)
    • 例えば 🗿 ならば U+1F5FF

UTF-8, UTF-16, UTF-32 の違い

UTF-32

  • Unicodeコードポイントをそのままつかった符号化方式
  • 21ビットだと切りが悪いので、32ビット

UTF-16

  • 1文字16ビット
  • 元々、unicodeは16ビットの固定長として開発されたため 、最初はUTF-16が、unicodeの唯一の符号化方式だった
  • 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
  • 必要に応じて文字のバイト数が変動するので、容量の無駄が少ないのが特徴

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

その他色々

  • Microsoft Windows や Javaでは "Unicode" といえば UTF-16 のリトルエンディアン という暗黙の了解になっている。
    • 元々Unicodeが16ビット固定長で開発されたという歴史的経緯のため

参考

サロゲートペア関係

31
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
31