ZalgoテキストのUnicodeレベルでの動作

Zalgoテキストの内部Unicode表現を探ります。コードポイント、書記素クラスタ、過剰な結合マークのレンダラー処理方法を含みます。

Fundamentals

詳細な説明

UnicodeレベルでのZalgo

Zalgoテキストを真に理解するには、コードポイントレベルで何が起こるか、テキストレンダリングシステムがスタックされた結合マークをどのように処理するかを見る必要があります。

コードポイント表現

1つの「Zalgo文字」は実際には複数のUnicodeコードポイントです。結合マークが6個付いた"H"は7個のコードポイントとして保存されますが、1つの(大幅に変更された)グリフとしてレンダリングされます。

文字列長 vs 視覚的長さ

const zalgo = "Ḩ̶̰̀́̂";
zalgo.length;           // 7(コードユニット)
[...zalgo].length;      // 7(コードポイント)
// しかし視覚的には1文字に見える

書記素クラスタ

Unicodeは書記素クラスタをユーザーが認識する文字として定義しています。Intl.Segmenter APIはこれを正しく識別します。

レンダリング動作

テキストレンダリングエンジンは過剰な結合マークを異なる方法で処理します:

  • ほとんどのブラウザ:すべてのマークをレンダリングしようとし、視覚的なオーバーフローが発生
  • ターミナル:余分なマークを切り捨てたり無視する場合がある
  • モバイルデバイス:パフォーマンスの問題を防ぐためにレンダリングを制限する場合がある

ユースケース

Unicodeの内部構造を理解することは、テキスト処理パイプライン、入力サニタイゼーションシステムの構築、または予期しない結合文字を含む国際化テキストのレンダリング問題のデバッグに不可欠です。

試してみる — Zalgo Text Generator

フルツールを開く