11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UTF-8とサロゲートペアって関係あるの?

Posted at

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にもサロゲートペアはありません。

11
4
1

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
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?