同じ絵文字を送ったはずなのに、相手の画面では少し違って見える。笑顔を選んだつもりでも、困った顔に受け取られる。絵文字には、文字の仕組みと、人が意味を読む仕組みの両方が関わっています。
「どの文字か」「どう描くか」「どう受け取るか」。この三つを分けると、小さな絵の中で起きていることが見えてきます。後半では、見えない文字を加える前後を実際に比べられます。
同じ文字なのに、なぜ絵柄が変わる?
文字をコンピューターで扱うには、文字と番号を対応させる必要があります。Unicodeでは、この番号を「コードポイント」と呼びます。たとえばハートに使う番号の一つはU+2764。U+の後ろは16進数で書かれた番号で、画像ファイルの名前ではありません。Unicodeの基本構造は、抽象的な文字と、それを表す番号を区別して説明しています。
一方、その文字を画面に描いた形は「グリフ」と呼びます。絵文字の仕様は、同じ文字に異なるデザインがあり得ることを前提にしています。何を表すかを保ちながら、線、色、細部の描き方は変わります。文字を識別する仕組みが共通でも、絵柄まで一枚の画像に統一されているわけではありません。
同じ番号の文字であることと、同じ見た目であることは別です。 端末やアプリで絵文字の表示が変わったときには、まず文字のデータと、描かれた形を分けて考えてみてください。
一つの絵文字に、なぜ複数の番号がある?
「女性の科学者」の絵文字は、仕組みを観察するのに向いています。Unicodeの公式データでは、女性を表すU+1F469、接合文字のU+200D、顕微鏡を表すU+1F52Cという順序で並んでいます。
真ん中の文字は、Zero Width Joiner、略してZWJ。「ゼロ幅の接合文字」という意味です。それ自体の絵を見せるのではなく、前後をつないだ表示に関わります。対応する環境では、この3コードポイントの並びが、一人の科学者の絵になります。
女性と顕微鏡をそのまま並べた場合は2コードポイント。間にZWJを加えると3コードポイントです。データを一つ増やしたのに、対応する表示では絵が一つにまとまる。下の比較では、この違いを確かめられます。
ただし、好きな絵文字をZWJでつなげば、どんな合成画でも作れるわけではありません。ここで使うのは、公式データに記載された組み合わせです。また、組み合わせに対応しない環境では、構成する絵が別々に表示されることがあります。絵が分かれたことだけから、途中の文字が失われたとは判断できません。
ハートが文字風や絵文字風になるのはなぜ?
ハートの後ろにも、見た目には表れない指定を添えられます。表示指定の公式データには、U+2764の後ろにU+FE0Eを置く並びと、U+FE0Fを置く並びが載っています。
前者は文字風の表示を求めるVS15、後者は絵文字風の表示を求めるVS16です。どちらも、ハートと指定文字を合わせて2コードポイント。指定が違うために描き方が変わることがありますが、実際の表示は端末やフォントの対応にもよります。
比較欄で二つのハートが同じように見えても、「内訳を見る」を開けば、後ろの番号が異なることを確認できます。見た目だけから、元の文字列が同じかどうかを判断するのは難しいのです。
絵柄をそろえれば、意味もそろう?
絵柄が同じでも、解釈が一致するとは限りません。Millerらが2016年に発表した研究は、絵文字の受け取り方をオンラインで調べました。米国在住の参加者を募り、品質確認後の304人について、22種類の絵文字を5プラットフォームで描いた計110の絵柄を分析しています。
参加者には絵文字の意味を言葉で説明してもらい、強い否定的感情を−5、強い肯定的感情を+5として評価してもらいました。会話の中ではなく、絵文字だけを見せた条件です。
注目したいのは、同じ絵柄への回答を二人分取り出して比べても、肯定的・中立・否定的という区分が25%の組み合わせで一致しなかったことです。これは「25%の人が間違えた」という意味ではありません。研究が測ったのは、参加者同士の受け取り方の違いです。
ただし、対象は2016年当時の限られた絵柄と米国の参加者です。現在の全端末、すべての絵文字、日本語の会話に、その割合をそのまま当てはめることはできません。実際のメッセージが何割誤解されたかを測った研究でもありません。
UnicodeのFAQも、絵文字には必ず一つの意味があるわけではなく、文脈、文化、言語などによって意味が変わると説明しています。規格上の名前を知ることと、その会話で相手が何を伝えたかったかを知ることには、距離があります。
見た目の「一文字」と、データの数は同じ?
ここまでの例では、科学者は3コードポイント、表示指定を添えたハートは2コードポイントでした。一つに見える絵にも、複数の番号が含まれています。
文字のまとまりを扱うために、Unicodeには「書記素クラスタ」という考え方があります。人が一文字と感じるまとまりに近づけて、文字列の境界を決める仕組みです。文字の区切り方の仕様は、その近似を定めています。コードポイントを数えることとは異なり、人の感覚と常に完全一致するという意味でもありません。
だから、「何文字か」を比べるときは、何を数えているかが大切です。下の表示で数えるのはコードポイント。画面に見える絵の数や、個々のアプリが文字数制限に使う数を保証するものではありません。
まずは、つなぐ文字の有無と、ハートの後ろの指定を比べてみてください。小さな絵を眺めるだけでは見えなかった違いが、内訳を開くと現れます。