文書ソフトで Hello と入力し、筆記体フォントを選んでからプレーンテキスト欄へコピーすると、文字は残ってもフォントは通常失われます。ところが ℋℯ𝓁𝓁ℴ をコピーすると、その見た目はかなりの確率で残ります。
後者がフォント情報を運んでいるわけではありません。別のUnicode文字を使っているのです。
文字とグリフは別のもの
Unicodeは抽象的な文字に番号を割り当てます。フォントと描画システムは、その文字を目に見えるグリフとして描きます。A がセリフ体でも丸文字でも筆文字でも、文字そのものはU+0041です。
CSSでArialをGeorgiaに変えるとグリフのデザインだけが変わります。おしゃれ文字変換は別の方法を使い、A を 𝐀(MATHEMATICAL BOLD CAPITAL A)や 𝔄(MATHEMATICAL FRAKTUR CAPITAL A)などへ置き換えます。
だからプレーンテキストのクリップボードでも形が伝わります。「フォント」という呼び方は便利ですが、技術的には少し不正確です。
なぜUnicodeに装飾されたアルファベットがあるのか
主な出典は Mathematical Alphanumeric Symbols ブロックです。数学では書体の違いが意味を持つことがあります。同じラテン文字に見えても、太字、筆記体、黒板太字がそれぞれ別の種類の対象を表す場合があります。
そのためUnicodeには次のような系列があります。
- ラテン・ギリシャ文字の太字と斜体
- 筆記体と太字筆記体
- Frakturと太字Fraktur
- 黒板太字の文字と数字
- サンセリフ体と等幅の数学用文字
これらは数式をプレーンテキストで表すときの意味を保つための文字です。Unicode規格も、一般の文章を飾るだけの用途は勧めていません。プロフィールやユーザー名での利用は、技術的な文字集合を創造的に転用したものです。
アルファベットに不思議な空きがある理由
筆記体や黒板太字を調べると、数文字だけ離れた場所にあることがあります。
ℂ、ℍ、ℕ、ℙ、ℚ、ℝ、ℤ は、数学用アルファベットが揃う前から Letterlike Symbols ブロックに存在していました。Unicodeは表を整えるためだけに同じ文字を重複登録しないので、新しいブロックには空きが残り、ソフトウェアは古いコードポイントを参照します。
見た目のアルファベットは連続していても、内部の番地は連続していません。
別のスタイルは別の仕組みを使う
Helloは東アジアのコンピューター文化から来た全角互換文字です。ᴛɪɴʏは音声記号や修飾文字を借りてスモールキャップを再現します。Hₑₗₗₒは不完全な下付き文字の集合を組み合わせています。- 丸囲み・四角囲み文字は囲み英数字です。
- 逆さ文字は、回転したラテン文字に似た別の文字へ置き換えます。
どの集合も完全な装飾アルファベットとして設計されたわけではありません。欠けた文字、ばらつく高さ、端末ごとの対応差は、異なる役割の文字を組み合わせた結果です。
正規化で元の文字が現れることがある
Unicode正規化には複数の形式があります。互換正規化のNFKCとNFKDは、数学用文字、全角文字、囲み文字、上付き文字などを通常の文字へ近づけます。NFKCを適用すると 𝐇 が H になる場合があります。
これは検索、比較、モデレーション、セキュリティに役立ちます。同時に、サービス側が貼り付けた文字をより普通の形で保存・表示することもあり得ます。
実用上の注意
- 対応フォントがなければ四角い豆腐になることがあります。
- 検索やメンションで通常の英字と同一視されない場合があります。
- スクリーンリーダーが長いUnicode名を読み上げることがあります。
- ユーザー名、URL、復旧情報が確認しづらくなります。
- 意図しない数学的な意味を持ち込むことがあります。
短い装飾見出しに使い、アカウント名、リンク、連絡先、重要な説明は通常の文字で残すのが安全です。
覚えておきたいのは「装飾」ではなく「置換」です。変換ツールが変えるのは、文字を描くフォントではなく、入力された文字そのものです。