「コピペしたら検索に引っかからない」「diff で差分がないのに一致しない」「ソースコードが謎のエラーで動かない」——こうした現象の裏には、画面に表示されない不可視文字(invisible characters)が潜むことがあります。幅がない、あるいはただの空白に見えるため、目で探すのはほぼ不可能。本記事では代表的なものをコードポイント付きの「図鑑」にまとめ、実害と対処法を解説します。

「見えないのに存在する文字」とは

Unicode には、表示上は何も見えない(またはただの空白に見える)のに、データとしては1文字ぶんを占める文字があります。改行やタブなどの制御文字のほか、単語の区切りや書字方向を制御する特殊文字が代表例です。正当な用途を持つ一方、コピペや文字コード変換で意図せず紛れ込むと、原因特定が難しいトラブルを起こします。

不可視文字カタログ

実務で遭遇しやすい不可視・紛らわしい文字を一覧にしました。名称とコードポイントは Unicode の規格に基づきます。

コードポイント名称見た目・幅主な出どころ危険度
U+200Bゼロ幅スペース(ZERO WIDTH SPACE)幅ゼロWord・Slack・PDF のコピペ
U+200Cゼロ幅非接合子(ZWNJ)幅ゼロ多言語組版(文字の接合を防ぐ)
U+200Dゼロ幅接合子(ZWJ)幅ゼロ・絵文字を連結合成絵文字(家族・職業など)
U+FEFFBOM/ゼロ幅ノーブレークスペース幅ゼロファイル先頭・UTF-8 保存時
U+00A0ノーブレークスペース(NBSP)半角空白1つ分Word・HTML の  
U+3000表意文字空間(全角スペース)全角の空白日本語入力(IME)
U+00ADソフトハイフン(SHY)通常は不可視Web・ワープロの折り返し指定
U+2060ワードジョイナー(WORD JOINER)幅ゼロ改行抑止の指定
U+200E左横書き記号(LRM)幅ゼロ・書字方向を制御双方向テキスト
U+202E右横書きオーバーライド(RLO)幅ゼロ・以降の表示順を反転攻撃・いたずら

実害:見た目が同じなのに一致しない

検索・diff の不一致。 たとえば「test」の t と e のあいだに U+200B が1つ入っているだけで、「test」で検索してもヒットしません。テキスト比較でも「差分あり」と判定され、原因が分からず時間を溶かします。

コードの崩れ。 ソースコードに不可視文字が混入すると、コンパイルエラーや SyntaxError の原因になります。とくにファイル先頭の BOM(U+FEFF)は、出力の先頭に余計な空白が出る、シェルスクリプトの shebang(1行目の #!)が壊れる、といった形で表面化します。

なりすまし。 U+202E(RLO)は、それ以降の文字の表示順を左右反転させます。内部的に「報告書」のあとに RLO を挟んで「cod.exe」と続くファイル名は、RLO 以降が逆順に表示されて画面上は「報告書exe.doc」に見え、実行ファイルを文書に偽装できます。見た目がそっくりな別字(ホモグリフ)と組み合わせれば、URL やドメインの偽装にもつながります。ドメインの偽装は、国際化ドメイン名を xn-- 表記に直すPunycode変換(日本語ドメイン)で実際のドメインと突き合わせて確認できます。

検出と除去のワークフロー

  1. まず疑う。 文字数が想定と合わない、末尾に謎の空白がある、検索が効かない——このサインが出たら不可視文字を疑います。
  2. 可視化して特定する。 目視では無理なので、文字を種類別に洗い出せるツールに貼り付けます。不可視文字の検出・除去は、ゼロ幅文字・BOM・特殊な空白・制御文字を種類ごとに検出・可視化し、ワンクリックで除去できます(処理は端末内で完結し、入力は送信されません)。
  3. 必要な文字は残す。 ZWJ(U+200D)は絵文字の連結に使われるため、一律に消すと「👨‍👩‍👧」のような合成絵文字が分解されます。用途のある文字は残す判断も必要です。
  4. 文字化けが絡むなら。 原因が不可視文字ではなく文字コードの取り違えのこともあります。その場合は文字化け修復・文字コード変換で元のエンコーディングを判定・修復します。

なお全角スペース(U+3000)は、Unicodeでは東アジアの組版で使われる表意文字用の空白で、日本語環境でとくに紛れ込みやすい文字です。日本語入力では字下げや変換前に U+3000 が自然に混ざる一方、コードや ID には半角スペースを使うべき場面が多く、混入には要注意です。

よくある質問

不可視文字はどうやって混入するのですか?
多くはコピペ経由です。Word・Slack・PDF・一部の Web ページから貼り付けると、NBSP(U+00A0)やゼロ幅スペース(U+200B)が一緒に入り込みます。日本語入力による全角スペース(U+3000)の紛れ込みも定番です。
BOM(U+FEFF)は消してよいですか?
UTF-8 の BOM は必須ではなく、多くの環境では付けない方が無難です。とくにシェルスクリプトや CSV、PHP などでは先頭の BOM が不具合の原因になります。一方で Excel の CSV 文字化け回避に付けることもあるため、用途を確認してから判断してください。

この記事のコードポイントと文字名称は Unicode 規格に基づきます(2026-07-16時点)。