「コピペしたら検索に引っかからない」「diff で差分がないのに一致しない」「ソースコードが謎のエラーで動かない」——こうした現象の裏には、画面に表示されない不可視文字(invisible characters)が潜むことがあります。幅がない、あるいはただの空白に見えるため、目で探すのはほぼ不可能。本記事では代表的なものをコードポイント付きの「図鑑」にまとめ、実害と対処法を解説します。
「見えないのに存在する文字」とは
Unicode には、表示上は何も見えない(またはただの空白に見える)のに、データとしては1文字ぶんを占める文字があります。改行やタブなどの制御文字のほか、単語の区切りや書字方向を制御する特殊文字が代表例です。正当な用途を持つ一方、コピペや文字コード変換で意図せず紛れ込むと、原因特定が難しいトラブルを起こします。
不可視文字カタログ
実務で遭遇しやすい不可視・紛らわしい文字を一覧にしました。名称とコードポイントは Unicode の規格に基づきます。
| コードポイント | 名称 | 見た目・幅 | 主な出どころ | 危険度 |
|---|---|---|---|---|
| U+200B | ゼロ幅スペース(ZERO WIDTH SPACE) | 幅ゼロ | Word・Slack・PDF のコピペ | 中 |
| U+200C | ゼロ幅非接合子(ZWNJ) | 幅ゼロ | 多言語組版(文字の接合を防ぐ) | 中 |
| U+200D | ゼロ幅接合子(ZWJ) | 幅ゼロ・絵文字を連結 | 合成絵文字(家族・職業など) | 中 |
| U+FEFF | BOM/ゼロ幅ノーブレークスペース | 幅ゼロ | ファイル先頭・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変換(日本語ドメイン)で実際のドメインと突き合わせて確認できます。
検出と除去のワークフロー
- まず疑う。 文字数が想定と合わない、末尾に謎の空白がある、検索が効かない——このサインが出たら不可視文字を疑います。
- 可視化して特定する。 目視では無理なので、文字を種類別に洗い出せるツールに貼り付けます。不可視文字の検出・除去は、ゼロ幅文字・BOM・特殊な空白・制御文字を種類ごとに検出・可視化し、ワンクリックで除去できます(処理は端末内で完結し、入力は送信されません)。
- 必要な文字は残す。 ZWJ(U+200D)は絵文字の連結に使われるため、一律に消すと「👨👩👧」のような合成絵文字が分解されます。用途のある文字は残す判断も必要です。
- 文字化けが絡むなら。 原因が不可視文字ではなく文字コードの取り違えのこともあります。その場合は文字化け修復・文字コード変換で元のエンコーディングを判定・修復します。
なお全角スペース(U+3000)は、Unicodeでは東アジアの組版で使われる表意文字用の空白で、日本語環境でとくに紛れ込みやすい文字です。日本語入力では字下げや変換前に U+3000 が自然に混ざる一方、コードや ID には半角スペースを使うべき場面が多く、混入には要注意です。
よくある質問
不可視文字はどうやって混入するのですか?
BOM(U+FEFF)は消してよいですか?
この記事のコードポイントと文字名称は Unicode 規格に基づきます(2026-07-16時点)。