空白にも、幅と働きの違いがある
文字の間が空いて見えても、そこに入っているのが同じ「スペース」とは限りません。普通の空白、改行を避ける空白、幅の狭い空白、そして幅を持たない制御用の文字があります。見た目だけで区別できないため、コピーした文章が検索に引っかからない、行が思わぬ位置で折れる、といった原因にもなります。
まず区別したいのは、文字として保存された空白と、文字間隔や余白の設定で生まれた空きです。後者はコピーしても空白文字にならないことがあります。また、見えない文字を全部「空白」と呼ぶのも正確ではありません。文字の結合や改行を制御する符号は、空白幅を作る文字とは別の役割を持っています。
よく出会う空白と不可視文字
| 名前 | Unicode | 主な働き |
|---|---|---|
| 通常の空白 | U+0020 SPACE | 英単語などを区切る。幅はフォントや組版による |
| いわゆる全角空白 | U+3000 IDEOGRAPHIC SPACE | 和文で使われる空白。一般に全角字幅を持つ |
| 改行しない空白 | U+00A0 NO-BREAK SPACE | 通常、その位置での自動折り返しを避ける |
| 狭い改行しない空白 | U+202F NARROW NO-BREAK SPACE | 狭い空きと改行抑制を組み合わせる |
| 細い空白 | U+2009 THIN SPACE | 通常の空白より細い空きを設ける |
| 幅のない空白 | U+200B ZERO WIDTH SPACE | 目立つ空きを作らず、折り返しの候補位置を示す |
| 単語連結子 | U+2060 WORD JOINER | 幅を持たず、前後での改行を抑制する |
| ゼロ幅接合子 | U+200D ZERO WIDTH JOINER | 文字の接合や一部の絵文字列の組合せに関わる |
「全角」「半角」は日常的には便利な呼び方ですが、すべての空白が一定の幅を持つわけではありません。比例幅フォント、文字サイズ、字間調整、両端揃えなどによって、実際に画面上で見える距離は変わります。U+0020を二つ置けば必ずU+3000一つと同じ幅になる、という規則もありません。
空きを作ることと、改行を許すことは別
例えば数値と単位を一まとまりに見せたいとき、「10」と「kg」の間にNO-BREAK SPACEを入れると、その空白の位置での自動折り返しを通常は避けられます。これは改行そのものを文章全体で禁止する機能ではなく、その位置の改行機会を制御する仕組みです。アプリが採用する組版規則によっても結果は変わります。
反対にZERO WIDTH SPACEは、空きを増やさず折り返し候補を与えます。長い文字列の区切りを知らせる用途がありますが、URLや識別子の途中に不用意に入れると、コピー先では元の文字列と一致しなくなることがあります。見やすさのために入れた符号が、そのままデータの一部になる点に注意が必要です。
ウェブでは、空白を連打しても広がらないことがある
通常のHTML表示では、連続した半角スペースや改行の多くが、CSSの空白処理によってまとめられます。ソースにスペースを五つ書いても、画面に五つ分の幅が残るとは限りません。一方、整形済みテキストとして空白を保持する設定もあります。保存されている文字列と、その表示方法は別々に調べる必要があります。
表の位置を合わせるために空白を大量に挿入すると、スマートフォンや別のフォントで崩れがちです。表は表として作り、字下げは段落やスタイルの設定で行う方が扱いやすくなります。タブも「何個かのスペース」そのものではなく、次のタブ位置まで進める制御文字なので、環境によって幅が変わります。
見えない文字を疑ったときの調べ方
文章が一致しないときは、まず原文を残したまま、問題の前後を短く切り出します。次にエディターの空白表示を有効にし、それでも分からなければUnicodeのコードポイントを表示できる機能で確認します。「見えないから削除」ではなく、何の符号がどこにあるかを確かめるのが先です。
特にZWJを一律に消すと、一つに見えていた絵文字が分かれたり、言語によっては文字の接続が変わったりします。改行しない空白を普通の空白へ置換すると、文章の折り返し方も変わります。検索用の別データを作って整えることと、原文を修正することは分けて考えると安全です。
関連する雑記
参考資料
- Unicode:General Punctuation文字表
- Unicode:CJK Symbols and Punctuation文字表
- Unicode:改行アルゴリズム UAX #14
- W3C:CSS Text Module Level 3
資料確認日:2026年10月2日
