Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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ビット固定長で開発されたという歴史的経緯のため

参考

サロゲートペア関係

kasei-san
小林の中の人 長文はblogに。QiitaにはちょっとしたTIPSを
http://kasei-san.hatenablog.com/
lclco
全国の高速バス価格情報を比較・検索できるサービスサイトを運営
https://www.lclco.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした