不可視文字検出器

任意のテキストを貼り付けると、検出器はその中に含まれるすべての不可視文字を報告します。これにはゼロ幅スペース、方向記号、BOM(バイト順マーク)、ソフトハイフン、改行なしスペース、そして空白のように見えながら検索・差分・コピー&ペーストを壊すUnicode制御コードポイントの一群が含まれます。各検出結果には、対応するコードポイント(U+200B)、公式なUnicode名称、および文字列内の位置が示されるため、除去する前に、正体不明の不具合がどこに潜んでいるかを正確に突き止められます。

不可視な文字をどのように検出するか

  1. 1

    テキストを貼り付けてください

    不審な文字列を入力してください、コードの断片、コピーされたメッセージ、設定値などです。

  2. 2

    スキャンを実行します

    このツールはすべてのコードポイントを走査し、目に見えない/書式に関する文字リストに一致するものをフラグとしてマークします。

  3. 3

    レポートを確認します

    各ヒットはその位置(インデックス1)、`U+HHHH`形式でのコードポイント、およびUnicode名(ゼロ幅スペース、BOMなど)を示しています。

  4. 4

    テキストをクリーンにします

    「置換」アクションを使用して不可視文字を削除または可視化し、その後、クリーンにしたバージョンを貼り付け直してください。

不可視な文字およびその出所

これらの文字は、正当な目的(テキストのレイアウト、書記方向、文字の組み合わせ)から存在しています。しかし、設計時の文脈から逸脱してコード、設定ファイル、検索クエリ、またはユーザー名に使用されると、バグとなることがあります。

検出器が探す文字

コードポイント 名前 よく紛れ込む場所
U+200B ゼロ幅スペース リッチテキストエディタ、ワードプロセッサ
U+200C ゼロ幅非結合子 ペルシャ語・ヒンディー語の組版
U+200D ゼロ幅結合子 絵文字シーケンス、インド系文字
U+200E 左から右へのマーク LTRとRTLの両方の文字を含むテキスト
U+200F 右から左へのマーク 同上
U+202A..E 埋め込み/上書き 同上。悪意を持って使われることもある(Trojan Source)
U+2028 行区切り Wordからのコピー。JSONエンコーダを壊す
U+2029 段落区切り 同上
U+FEFF バイト順マーク NotepadでUTF-8 with BOMとして保存したファイル
U+00A0 改行なしスペース Wordから来る組版用の空白
U+00AD ソフトハイフン リッチテキストのハイフネーションのヒント

不可視文字による不具合のよくある症状

  • 「等しくなるはず」の文字列比較が等しくならない。 その値をこのツールにコピーし、バイト数を確認してください。
  • 目視では一致するのにコードでは失敗する正規表現。 スペースになりすましたU+00A0であることが多いです。
  • 貼り付けたペイロードでJSONパーサがクラッシュする。 たいていは先頭のBOM、またはJavaScriptがJSON内で拒否する文字列リテラル中のU+2028です。
  • SEOタイトルの長さがおかしい。 ゼロ幅スペースが、見た目を変えないまま上限を超えさせます。

Trojan Sourceという観点

双方向オーバーライド文字(U+202EU+2066U+2069)は、ソースコードをある順序で表示させながら別の順序でコンパイルさせることができます。これが「Trojan Source」と呼ばれる攻撃の一種です。信頼できない貢献者のコードをレビューするなら、マージ前にその差分をこの検出器に通してください。

よくある質問

Notepadやいくつかの古いWindowsツールでは、デフォルトで「UTF-8(BOM付き)」が設定されています。BOM(U+FEFF)はWindowsアプリには問題ありませんが、多くのシェルパイプライン、PHPファイル(BOMは<?phpタグの前に出力として再現される)、およびJSONパーサーでは動作が障害されます。

画面では通常のスペースのように見えるものの、実際には異なる動作を示します。改行が許されておらず、すべての言語におけるほとんどの\s regex変体とも一致しません。そのため、リッチテキストソースからコピーされたファイルパスやメールアドレス、ユーザー名などに頻繁に含まれてしまう傾向があります。

常にそうとは限りません。アラビア語、ペルシャ語、またはデヴァナガーリ文字のテキストでは、ゼロ幅接続記号および非接続記号が意味的に必須です。コード、設定情報、およびほとんどの英語テキストについては、自由に省略してください。自然言語コンテンツの場合は、省略前に検出機能を用いて確認してください。

いいえ、この分析は現在のリクエストに対して実行され、応答が生成された後でも貼り付けた内容は保存または記録されません。

関連ツール

このツールは他の言語でも利用できます