ゼロ幅ジョイナーとノンジョイナー(ZWJ/ZWNJ)の検出

テキスト内のゼロ幅ジョイナー(U+200D)とゼロ幅ノンジョイナー(U+200C)文字を特定します。絵文字やスクリプトでの役割を理解します。

Zero-Width Characters

詳細な説明

ZWJとZWNJ:Unicodeの不可視の接着剤

ゼロ幅ジョイナー(ZWJ、U+200D)とゼロ幅ノンジョイナー(ZWNJ、U+200C)は、可視的な幅を追加せずに隣接する文字の結合または分離を制御するUnicode書式文字です。

ゼロ幅ジョイナー(ZWJ)

ZWJは絵文字シーケンスでの役割で最もよく知られています。家族グループ、肌の色のバリエーション、職業の絵文字などのモダンな絵文字は、複数の絵文字をZWJで結合して作成されます:

👨‍👩‍👧‍👦  =  👨 + ZWJ + 👩 + ZWJ + 👧 + ZWJ + 👦
👨‍💻  =  👨 + ZWJ + 💻  (男性テクノロジスト)

ZWJは以下でも使用されます:

  • インド系文字:ヒンディー語、ベンガル語、タミル語での合字形成の制御
  • アラビア文字:文字間の草書体結合の強制

ゼロ幅ノンジョイナー(ZWNJ)

ZWNJは逆の動作をします — 通常結合する文字の結合を防止します:

  • ペルシア語/ファルシー語:ZWNJが複合語を視覚的に近い状態で分離
  • ドイツ語:ハイフネーション動作の制御
  • インド系文字:不要な合字の防止

ZWJ/ZWNJが問題を引き起こす場合

これらの文字は特定のコンテキストでは正当ですが、以下の場合にバグとなります:

  • コードや変数名にコピーされた場合
  • ユーザー入力からのJSONキーや値に存在する場合
  • URLやメールアドレスに埋め込まれた場合
  • 予期しない文字列長を引き起こす場合("abc".length"a\u200Dbc".length

可視化

ホワイトスペースビジュアライザーはZWJを赤い**[ZWJ]、ZWNJを赤い[ZWNJ]**マーカーとして表示します。統計パネルがそれぞれを個別にカウントします。Cleanセクションで一方または両方を選択的にクリーンアップできます。

ユースケース

国際化エンジニアがペルシア語テキストのレンダリングをデバッグ中に、単語境界が正しく機能していないことを発見します。テキストをホワイトスペースビジュアライザーに貼り付けると、コンテンツ管理システムによって挿入されたZWNJ文字の誤配置が検出され、不正な改行動作の原因が判明します。

試してみる — Whitespace Visualizer

フルツールを開く