Unicodeにおいて、UTF-8でも複数符号単位を使って表現する文字があるにも関わらず、UTF-16だけ2符号単位で文字を表現するときにはサロゲートペアという呼び名が付けられてるのは何故でしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
Unicode 登場時点って、文字集合と符号化方式がイコールだったんですよ。
文字集合は16ビット。符号化方式も文字集合のコード体系と同じ。
なので最初は UTF-16 という言葉さえなかった。
例えば「あ」は U+3042。いまで言う UTF-16 でも 0x3042。同じ。
その後、全然文字数足らんじゃないかと騒動になり文字集合が 32ビットとなった。
これまでの符号化方式をなかったことにするわけにはいかない、とはいえ
16ビットでは収まらない。なので符号化方式に無理やりサロゲートペアを
追加したが、それを UTF-16と呼びましょうということにした (ここで
はじめて文字集合と符号化方式のコード体系が分かれた)。
UTF-8 や UTF-32 は 32ビット化騒動以降にできたものなので、
サロゲートペアという変なしくみはない。
ちなみに UCS-4(文字集合) と UTF-8 (符号化方式) の対応はこんな感じです。
UCS-4 (16進数) UTF-8 (2進数) ----------------- --------------------------------------- 00000000-0000007F 0xxxxxxx 00000080-000007FF 110xxxxx 10xxxxxx 00000800-0000FFFF 1110xxxx 10xxxxxx 10xxxxxx 00010000-001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
16進数の 7 は 3bit、F は 4bit で表現できるので、
例えば UCS-4 の 000007FF は 3bit+4bit+4bit=11bit。
対する右側 2進数の x の個数は 11個なので、11bit。
よって、UCS-4 のビットを少々移動するだけで UTF-8 になります。
これが UTF-8 にはサロゲートペアという変な仕組みはない、ということです。
以上、お詳しい方がみたら怒られそうな不正確な表現がたくさんあると思いますので、雰囲気だけお感じいただければと思います。
投稿2021/01/27 14:56
編集2021/01/27 15:14総合スコア2022
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。