サロゲートペアとは?システムバグの常習犯!?

響きがカッコいい単語サロゲートペアとはIT
この記事は約7分で読めます。

響きがかっこいい単語、今回のテーマはサロゲートペア!

「Surrogate Pair」を日本語読みした言葉で、コンピューターの文字処理に関する専門用語です。普段の生活では聞くことのない言葉ですが、PCやスマホで珍しい漢字や絵文字を入力したときに、内部で関わっている技術なんです。

プログラマーやシステムエンジニアなら一度は頭を悩ませたことがあるかもしれませんが、一般の人にはまったく馴染みのない用語でしょう。でも知ってみると、パソコンやスマホのでの文字の扱い方の奥深さを感じられる面白い概念かもしれません。

「サロゲートペア」のことば診断

当サイトでは、響きがかっこよく、知的好奇心をくすぐる珠玉の単語を厳選して、中学生から大人までわかりやすく紹介しています。

今回のテーマ「サロゲートペア」について、「身近さ」「レア度」「難解度」をそれぞれ診断してみました!

身近さ:5.0(どれくらい身近な世界の話か)

5.0

普段の生活でサロゲートペアについて意識することは一切ありませんが、スマホやパソコンで文字を扱うすべての人に関係しています。

絵文字や特殊な文字が文字化けしたとき、その裏にサロゲートペアの問題が潜んでいることがあります。

レア度:4.5(日常生活での遭遇頻度)

4.5

文字化けやシステム開発に携わる一部の人を除けば、まず耳にすることのない専門用語です。ITエンジニアや文字コードに詳しい人以外が話題にすることはめったにありません。

ただし、ITエンジニアであれば聞いたことがある人も多いでしょう。

難解度:4.5(言葉の意味理解の難易度)

4.5

プログラミングの知識、文字コードの知識がないと全く意味がわからないかもしれません。

「サロゲートペア」のレア度

一般常識度:1点

IT業界にいれば割と関わる単語ですが、それ以外の人はほぼ聞いたこと無いはず

日常使い度:1点

一般的な日常会話ではまず出てこない専門用語。プログラミングの現場や、文字化け対応の技術的な議論でのみ登場する可能性がある言葉かも?

マニアック度:5点

完全に専門用語の領域。文字コードやUnicodeの世界では重要な概念ですが、それ以外の場面で聞くことはほぼないでしょう。

サロゲートペアって何?

サロゲートペアとは、Unicodeという文字コード体系において、1つの文字を表現するために2つのコード単位を組み合わせて使う仕組みのことです。

文字コードについてはこの後もう少し詳しく説明しますね。

読み方は「サロゲートペア」で、英語表記は「Surrogate Pair」。「Surrogate」は「代理」や「代替」という意味で、「Pair」は「ペア」「組み合わせ」という意味です。つまり、「代理となる組み合わせ」という意味になります。

どんなときに使われる言葉なのか

この言葉が登場するのは、主にプログラミングの現場です。

「この絵文字、サロゲートペアだから文字数カウントがおかしくなってる」「データベースにサロゲートペア文字を保存するときは注意が必要」といった具合に、システム開発者やプログラマーの間で使われます。

また、Webサイトで珍しい漢字や絵文字が正しく表示されない、文字数制限のある入力フォームで予想より少ない文字数しか入力できない、といった不具合が発生したときの原因調査でも登場する用語です。

文字コードとは?

スマートフォンやパソコンで文字を表示するとき、裏側で「文字コード」という仕組みが動いています。

文字コードとは、コンピューターが文字を理解するために、1つ1つの文字に番号を割り当てたルールのことです。人間には「あ」というもじはコンピューターにとっては「12354番の文字」という数字として扱われています。

昔は国や地域ごとに違う文字コードが使われていました。日本では「Shift_JIS」、中国では「GB2312」、韓国では「EUC-KR」といった具合です。でも、これだと日本のサイトで中国語を表示したり、韓国語と日本語を同じページに表示したりするのが困難でした。

Unicodeの登場

そこで登場したのが「Unicode(ユニコード)」という文字コードです。

Unicodeは「世界中の文字を1つの体系で表現しよう」という壮大な目標で作られました。日本語、中国語、韓国語、アラビア語、ヒンディー語、絵文字まで、ありとあらゆる文字に統一的な番号を割り当てたんです。

最初のUnicodeでは、各文字を16ビット(0~65535番)で表現することにしました。これなら約6万5千文字まで扱えるので、当時は「これで十分だろう」と思われていました。

でも、6万5千文字じゃ足りなかった!

ところが、実際に世界中の文字を集めてみると、6万5千文字では全然足りないことがわかりました。

日本語だけでも、ひらがな、カタカナ、常用漢字(約2000字)、人名用漢字、古い漢字、異体字などを含めると膨大な数になります。さらに中国の漢字、韓国のハングル、世界各国の文字、そして最近人気の絵文字まで含めると、10万文字を軽く超えてしまったんです。

そこで考え出されたのが「サロゲートペア」という仕組みです。

サロゲートペアの仕組み

Unicodeでは、よく使われる文字(基本多言語面:BMP)は従来通り16ビットの1つの番号で表現し、それ以外の文字は「サロゲートペア」という特別な方法で表現することにしました。

サロゲートペアでは、1つの文字を表現するために、2つの16ビットコード(上位サロゲート+下位サロゲート)を組み合わせて使います。これは「2人1組で1つの文字を表現する」ようなイメージです。

この仕組みにより、16ビットの制限を超えて、約100万文字まで表現できるようになりました。現在のスマートフォンで多彩な絵文字が使えるのも、世界中の珍しい文字が正しく表示されるのも、このサロゲートペアのおかげなんです。

身近な例:絵文字と漢字

私たちが普段使っている絵文字の多くは、実はサロゲートペアで表現されています。

例えば、😀(にっこり顔の絵文字)や🍎(りんごの絵文字)、👨‍👩‍👧‍👦(家族の絵文字)などは、コンピューター内部では2つの文字コードの組み合わせで管理されています。

また、人名や地名で使われる珍しい漢字の中にも、サロゲートペアで表現されるものがあります。例えば「𠮷」(つちよし)という字は、一般的な「吉」とは別の文字として扱われ、サロゲートペアで表現されています。

サロゲートペアが引き起こす問題

サロゲートペアは便利な仕組みですが、プログラミングの世界ではいくつかの問題を引き起こします。

文字数カウントの問題:TwitterやInstagramなどのSNSで、絵文字を使ったときに思ったより文字数が減ってしまうことがあります。これは、1つの絵文字がサロゲートペアで表現されていて、システム内部では2文字分として数えられているからです。

データベースの問題:古いデータベースシステムでは、サロゲートペア文字を正しく保存できない場合があります。せっかく入力した絵文字や珍しい漢字が、保存時に消えてしまったり、文字化けしたりすることがあります。

文字列処理の問題:プログラムで文字列を途中で切り取ったりするときに、サロゲートペアの途中で切断してしまうと、文字化けが発生してしまいます。

対策と解決方法

現在では、多くのプログラミング言語やデータベースがサロゲートペアに対応しています。

プログラマーは、文字数をカウントするときに「文字コード単位」ではなく「文字単位」でカウントするライブラリを使ったり、データベースの文字コード設定を「UTF-8」や「UTF-16」に設定したりして対応しています。

また、最近のWebブラウザやスマートフォンアプリでは、サロゲートペア文字も正しく表示・処理できるようになってきました。

まとめ

今回は、響きがかっこいい単語としてサロゲートペアについて紹介しました。

普段何気なく使っている絵文字や珍しい漢字の裏側で、こんな複雑な仕組みが動いているなんて驚きですね!プログラマーにとっては時に頭痛の種となる概念ですが、世界中の多様な文字を自由に使えるインターネットの実現には欠かせない技術なんです。

スマホで絵文字を使うときや、珍しい漢字を入力するときには、このサロゲートペアのことを少し思い出してみてください。きっと、文字という身近な存在の奥深さを感じられるはずです!

コメント

タイトルとURLをコピーしました