TL;DR
関係ないです。
はじめに
サロゲートペアってよく分からんけど、UTF-8使うときに気にしないといけないものなの?
を調べたときによく分からなかったので、同じようにハマった人の手助けになれば。
Unicodeって?
世界中の文字を全部詰め込んだ文字セット(文字コードの集合)を作ろうぜ!
というコンセプトで作られたものです。
今もなおどんどんアップデートされ、文字が追加されています。
(最近は絵文字とかが追加されている)
たとえば「あ」だったら、U+3042
に割り当てられます。
その他の例は以下です。
文字 | Unicode |
---|---|
A | U+41 |
Ω | U+3A9 |
語 | U+8A9E |
😊 | U+1F60A |
UTF-8とかUTF-16とかUTF-32って?
エンコード方式。
文字をどうやってデータに変換するかのルール。
UTF-8:文字を8ビット単位に変換する。
UTF-16:文字を16ビットに変換する。
UTF-32:文字を32ビットに変換する。
実際に変換した例が以下です。
文字 | Unicode | UTF-8 | UTF-16 | UTF-32 |
---|---|---|---|---|
A | U+41 | 41 | 0041 | 00000041 |
Ω | U+3A9 | CE A9 | 03A9 | 000003A9 |
語 | U+8A9E | E8 AA 9E | 8A9E | 00008A9E |
😊 | U+1F60A | F0 9F 98 8A | D83D DE0A | 0001F60A |
あれ?なんか1人ルール違反してる人がいますね。
ただ、大人の世界では、ルール違反が起きたら、ルールのほうを変えてしまうことがあります。
この例外ルールがサロゲートペアです。
サロゲートペアって?
Unicodeはどんどん文字を追加しているうちに、16ビットでは表現しきれない情報量になってしまいました。
でも、UTF-16:文字を16ビットに変換する。
というのはもう決めてしまっていた後なので、なんとかしないといけません。
そこで、**2文字で1文字を表現しよう!**となりました。
人間、追い詰められるとワケ分からんこと言い出しますね。
2文字だから「ペア」です。
#サロゲートの意味は「代理」だそうです。
まとめ
UTF-8は8ビット単位でエンコードを行うため、16ビットを超える文字でも問題なく変換することができます。
つまり、UTF-8にサロゲートペアはありません。
#同様に、UTF-32にもサロゲートペアはありません。