コピペ

空白コピペ

見た目が空になる文字を集めました。タイルを押すと、その文字がそのままコピーされます。どれも性質が違うので、下の表で見分けてください。

タップするとコピーできます。入力した内容がどこかに送られることはありません。

「空白」と呼ばれている文字は一つではない

見た目が空になる文字はいくつもあり、性質は違います。五つを Python の unicodedata で調べました。右端は、その文字だけを str.strip() に通して消えたかどうかの実測です。

番号 Unicode 名 種別 UTF-8 strip で
U+3000 IDEOGRAPHIC SPACE 空白文字 Zs F 全角 3 落ちる
U+00A0 NO-BREAK SPACE 空白文字 Zs N ふつう 2 落ちる
U+2007 FIGURE SPACE 空白文字 Zs N ふつう 3 落ちる
U+200B ZERO WIDTH SPACE 書式制御 Cf N ふつう 3 残る
U+2800 BRAILLE PATTERN BLANK 記号 So N ふつう 3 残る

種別の欄が、五つを二つに割っている

「種別」は Unicode のカテゴリです。Zs は空白文字、Cf は書式制御、So は記号を指します。前後の空白を落とす処理はたいていこのカテゴリを基準にするので、上の三つは落ち、下の二つは残ります。

残る理由は二つで別々です。U+200B は名前に SPACE とありますが、カテゴリは Cf です。U+2800 は空白として定義されてすらいません。

U+2800 は空白ではなく、点の出ていない点字

点字は六つか八つの点の組み合わせで一文字を作ります。その組み合わせがそのまま Unicode に並んでいて、U+2801BRAILLE PATTERN DOTS-1U+28FFBRAILLE PATTERN DOTS-12345678 です。その先頭、どの点も立っていない組み合わせが U+2800 にあたります。

だからこれは記号であって、空白ではありません。カテゴリは So、つまり印字される文字で、幅も一文字ぶん取ります。いっぽう U+200B は幅がゼロで、いくつ置いても場所を取りません。同じ「何も見えない」でも、場所を取る側と取らない側があります。

正規化を通すと三つは半角スペースに戻る

unicodedata.normalize('NFKC', ...) を通すと、U+3000U+00A0U+2007 はどれも U+0020 になります。分解の指定が <wide> 0020<noBreak> 0020 だからです。残る二つは NFKC でも変わりません。

使いどころ

  • 欄を空に見せる ── 文字は入っているのに、表示上は何も出ません。
  • 行頭を下げる ── U+3000 は全角一文字ぶんの幅があります。
  • 折り返させない ── U+00A0 はそこで行が折り返りません。数値と単位のように離したくない組に挟みます。
  • 桁をそろえる ── U+2007 の幅は書体が決めます。数字の幅にそろえた書体では、数字一文字ぶんです。

幅を取りたいなら U+3000U+2800、取りたくないなら U+200B です。見えにくい文字や記号は特殊な文字のコピペまとめに、空白で形を作る使い方はアスキーアートまとめに、貼る単位そのものの話はコピペにあります。