本文へ移動
Develop Tools
← 使い方ガイドへ戻る

Zalgoを普通の文字に戻す方法|大量の結合文字を解除

Zalgoを戻すときは、まず本ツールが生成に使うMarkだけを除去し、アクセントや日本語の濁点が残るか比較します。

Zalgo文字列を既知Markだけの解除と全Unicode Mark解除で比較する流れ
Zalgo文字列を既知Markだけの解除と全Unicode Mark解除で比較する流れ

ZalgoテキストをBrowser内で生成・解除する

文字の上・中央・下、強度、変換率、対象文字、再現用シードを指定し、結果と統計を確認できます。解除時は対象範囲を2モードから選べます。

Zalgoテキスト生成・解除ツールを開く

結論:既知Markだけを先に除去し、全Mark除去は比較用Copyで試す

「このツールで使う文字のみ」は内蔵Poolと一致するMarkだけを除去します。「すべての結合文字」はUnicode Mark全般を対象にするため、外部Zalgoへ強い一方で通常の言語表記を壊し得ます。

除去処理から元のMarkの目的は推定できません。元から存在したアクセントと後付けZalgoが同じCode Pointなら、Originalなしに完全区別できません。

解除結果を原文へ上書きする前に、Originalと安全寄り解除と全Mark解除の3つを比較してください。

解除方法を選ぶ判断材料

生成元が分かるか、通常のアクセントを含むか、日本語がNFD相当の列かを確認します。

本ツール生成と分かる場合は既知Markだけ、出所不明で読めない場合に限り全Mark解除をCopyへ試します。

確認項目確認方法判断
生成元本ツールか確認既知Mark解除
言語アクセント・濁点を確認全Mark解除に注意
残存MarkCode Point解析必要なら強力解除
復元Originalと比較一致しなければ保存しない

Zalgoを段階的に解除する手順

  1. 入力を複製してOriginalを保持します。
  2. 解除対象を「このツールで使う文字のみ」にします。
  3. Zalgoを解除し、残存Markと読みやすさを確認します。
  4. 必要な場合だけ「すべての結合文字」を別Copyへ試します。
  5. アクセント・濁点・意味・文字数を比較して採用結果を決めます。

外部GeneratorのMark Poolは異なるため、安全寄り解除で一部が残ることは失敗ではありません。

解除しても完全復元できない条件

  • Originalを保存していない
  • Zalgo追加前からCombining Markがあった
  • 貼り付け先ですでに正規化・置換された
  • Base Character自体が削除・変更された
  • 複数GeneratorのMarkが混在する

ZalgoはフォントではなくUnicode結合文字の並び

表示例内部表現意味
AU+0041Base Characterだけ
U+0041 + U+0301BaseにCombining Acute Accentを1つ追加
Zalgo風AU+0041 + 複数のMarkBaseへ上・中央・下のMarkを重ねた文字列
CSS Font変更U+0041のままCode Pointを変えずGlyphだけを変える

UnicodeのGeneral_Category MにはNonspacing Mark、Spacing Combining Mark、Enclosing Markが含まれます。Zalgo Generatorで使う文字の多くは結合記号ですが、結合文字はアクセント、発音記号、濁点・半濁点など通常の言語表記にも必要です。「Markなら不要」「U+0300~U+036Fだけが全Combining Mark」とは判断しません。

解除は安全寄りと強力な方法を使い分ける

解除方法削除対象向く場面主なリスク
このツールで使う文字のみ内蔵Zalgo Mark Poolに含まれる文字本ツールで生成した出力、通常のアクセントを残したい場合外部Generator独自のMarkが残ることがある
すべての結合文字Unicode Property Escapeの\p{M}相当出所不明のZalgoを強く除去したい場合アクセント、分解済み濁点・半濁点、他言語の記号まで失う可能性
元データへ戻す編集前に保持したOriginal完全な復元が必要な場合Originalがなければ利用できない

「すべての結合文字」は万能な安全解除ではありません。重要な文章はOriginalを保持し、解除前後を比較してから保存・送信してください。

見た目の1文字と内部の長さを分けて数える

単位Zalgoで増えるか確認用途
Grapheme ClusterBaseとMarkが1つの書記素に見える場合は増えない利用者が認識する文字数、Cursor移動
Code Point追加したMarkごとに増えるUnicode解析、生成上限、文字列走査
UTF-16 Code UnitBMP内のMarkは通常1ずつ増え、補助平面文字は2になるJavaScript String.length、Legacy API
UTF-8 ByteMarkのEncoding分だけ増えるDB列、API Payload、File Size

JavaScriptのString.lengthはUTF-16 Code Unit数で、見た目の文字数ではありません。現行ツールはIntl.Segmenterが利用できる場合にGrapheme単位で入力を分割し、出力はArray.fromでCode Point数を集計します。保存先の上限は書記素数だけでなくCode Point数とByte数でも確認します。

NormalizationだけでZalgo解除は完了しない

形式主な処理Zalgoへの注意
NFCCanonical Decomposition後に可能な列をComposition並び替えや合成は行うが、大量のMarkを削除しない
NFDCanonical Decomposition合成済みアクセントや濁点がBase + Markへ分かれ、Mark数が増える場合がある
NFKCCompatibility Decomposition後にComposition互換表現を変えるがZalgo解除専用ではなく、意味のある表記差も変え得る
NFKDCompatibility Decomposition互換分解とCanonical Decompositionで復元不能な差が増える場合がある

正規化は等価なUnicode表現を扱いやすくする仕様で、不要な装飾を自動判定する機能ではありません。解除処理の前後でNFCを使う設計はあり得ますが、目的、保存形式、Round Trip要件を決めてから適用します。現行ZalgoツールはNormalizationを実行しません。

DevelopToolsで確認できる機能と境界

項目現行ツールの動作
生成位置文字の上・中央・下を個別に選択し、選んだMark Poolから結合文字を追加する
強度弱い・標準・強い・最大と、1~20のカスタム強度を指定できる
対象文字は対象。数字、空白、記号・絵文字、選択範囲は設定で切り替える。改行は常に保持する
再現性同じ入力・設定・シードなら同じ生成結果を再現できる
解除「このツールで使う文字のみ」と「すべてのUnicode結合文字」の2モードを選べる
統計入力書記素数、出力Code Point数、変換文字数、追加・除去Mark数、UTF-8 Sizeを表示する
上限入力50,000書記素、出力500,000 Code Point、1書記素40Markまでに制限する
未対応NFC/NFD/NFKC/NFKDの実行、Unicode名一覧、Mark位置の個別編集、完全な元文字列復元は行わない
Privacy入力と結果をServerへ送信せず、設定だけをBrowserのLocalStorageへ保存する

解除モード名は現行画面では「すべての結合文字」と「このツールで使う文字のみ」です。本記事では後者を安全寄り、前者を強力だが破壊的になり得る解除として説明します。画面に存在しないSafe Remove/Aggressive Removeというボタン名は案内しません。

仕様確認に使う一次資料

NormalizationはUAX #15、Grapheme ClusterはUAX #29、General_CategoryやCombining ClassはUAX #44を基準にします。JavaScriptのUnicode Property Escape、Intl.Segmenter、String.lengthはMDNの仕様説明と照合し、特定のBlockだけを全Markとして扱いません。

具体例:日本語とアクセントを含む文字列を解除する

既知Mark解除後に「が」「é」が維持されるかを確認します。

全Mark解除で「か」「e」へ変わる場合があるため、安全寄りの結果を優先します。

  1. Originalを保持
  2. 既知Mark解除
  3. 日本語・Latinを比較
  4. 残存Markを解析
  5. 必要時だけ全Mark解除

見た目が読みやすくなっても、言語情報が失われていないか確認します。

よくある質問

Zalgoテキストは特殊フォントですか?
違います。通常のBase Characterへ複数のUnicode結合文字を追加した文字列です。Fontによって重なり方は変わりますが、CopyされるのはCode Point列です。
すべての結合文字を消せば安全に元へ戻せますか?
保証できません。通常のアクセント、発音記号、分解済みの濁点・半濁点などもMarkです。まず本ツール既知のMarkだけを除去し、必要な言語情報が残るか確認してください。
入力や生成結果はServerへ送信されますか?
現行Zalgoテキスト生成・解除ツールはBrowser内で処理し、入力と結果をServerへ送信しません。LocalStorageへ保存するのは表示・生成設定だけです。