Unicode, UTF についてひっかかったので色々メモ
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ビット固定長で開発されたという歴史的経緯のため
参考
- https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
- Unicode - Wikipedia
-
http://graphemica.com/%F0%9F%97%BF
- 文字コード毎の詳細情報が見れて便利
- 絵文字がある種のUnicodeバグを世界から一掃しつつある件について|Rui Ueyama|note
サロゲートペア関係
U+
をつけて表す( Unicodeコードポイント と呼ぶ)
- 例えば 🗿 ならば
U+1F5FF
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ビット固定長で開発されたという歴史的経緯のため
参考
- https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
- Unicode - Wikipedia
-
http://graphemica.com/%F0%9F%97%BF
- 文字コード毎の詳細情報が見れて便利
- 絵文字がある種のUnicodeバグを世界から一掃しつつある件について|Rui Ueyama|note
サロゲートペア関係
- windows : 8以降
- MacOS : 10.7(Lion)以降
- それ以前のバージョンでも絵文字対応しているフォントを落とせば見れるらしい
- 参考 : Help:特殊文字 - Wikipedia
- Microsoft Windows や Javaでは "Unicode" といえば UTF-16 のリトルエンディアン という暗黙の了解になっている。
- 元々Unicodeが16ビット固定長で開発されたという歴史的経緯のため
参考
- https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
- Unicode - Wikipedia
-
http://graphemica.com/%F0%9F%97%BF
- 文字コード毎の詳細情報が見れて便利
- 絵文字がある種のUnicodeバグを世界から一掃しつつある件について|Rui Ueyama|note
サロゲートペア関係
- 文字コード毎の詳細情報が見れて便利
Author And Source
この問題について(Unicode, UTF についてひっかかったので色々メモ), 我々は、より多くの情報をここで見つけました https://qiita.com/kasei-san/items/fd0adedc398480cf4ce8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .