ゼロ幅スペースの謎を解く

ゼロ幅スペース(Zero Width Space, ZWSP)とは?

ゼロ幅スペース - Wikipedia

によれば、

  • コンピュータの組版に用いられる非表示文字で、文書処理システムに対して語の切れ目を示すのに用いる。
  • HTMLでは要素の代替として、長い単語の途中で改行可能な場所を示すのに使われる。

例として、以下の文字列では、キャメルケースの単語間には、ZWSPがそれぞれ入っている(非表示のため目には見えない)

Lorem​Ipsum​Dolor​Sit​Amet​Consectetur​Adipiscing​Elit​Sed​Do​Eiusmod​Tempor​Incididunt​Ut​Labore​Et​Dolore

Vimで開くと以下のように見える

Lorem<200b>Ipsum<200b>Dolor<200b>Sit<200b>Amet<200b>Consectetur<200b>Adipiscing<200b>Elit<200b>Sed<    200b>Do<200b>Eiusmod<200b>Tempor<200b>Incididunt<200b>Ut<200b>Labore<200b>Et<200b>Dolore

このなぞの「<200b>」がZWSPである。

<200b>は何のコードか

<200b>は「ゼロ幅スペース」のUnicodeである。

Unicode Character Table

をみると、<200b>のUTF-8での16進数は「E2 80 8B」である。

バイナリエディタでみてみる

それでは、文字列

Lorem​Ipsum​Dolor​Sit​Amet​Consectetur​Adipiscing​Elit​Sed​Do​Eiusmod​Tempor​Incididunt​Ut​Labore​Et​Dolore

バイナリエディタで16進数をdumpしてみる

$ echo "Lorem​Ipsum​Dolor​Sit​Amet​Consectetur​Adipiscing​Elit​Sed​Do​Eiusmod​Tempor​Incididunt​Ut​Labore​Et​Dolore" | od -t x1

0000000 4c 6f 72 65 6d e2 80 8b 49 70 73 75 6d e2 80 8b
0000020 44 6f 6c 6f 72 e2 80 8b 53 69 74 e2 80 8b 41 6d
0000040 65 74 e2 80 8b 43 6f 6e 73 65 63 74 65 74 75 72
(省略)

テキストファイルから<200b>文字を削除する

ファイルをvimで開いて、

:%s/\%u200b//g

これで、ファイル内すべての<200b>を削除できる。

vim以外の方法で、sedなどいろいろ試してみたが、うまく行かず諦めた。。

<200b>のコピペ

コピーについては、以下の資料を参考にうまく行けた。

unicodeでU+200B;幅なしスペース(幅が0)という文字があるん... - Yahoo!知恵袋

まず、文字幅0のスペースの左側に文字カーソルを置きます。 次に、Shift+→ で文字幅0のスペースを選択します。 (ただし、反転表示されないので、選択されたかどうか解り難いです)
Ctrl+C でコピー
Ctrl+V で貼り付け

<200b>の入力

あくまでもMacしか試していないので、Windowsの方はもっといろいろな方法があるかもしれない。

ChromeのConsoleから

Consoleを開いて、copy("\u200B")を打てば文字がクリップボードに入ったため、後はペストすればいい。 個人的にこの方法が好き。

Unicode Character Table から

Unicode Character Table から「Copy」ボタンを押せばコピーされ、後はペストすればいい。

coolsymbol.comから

Symbols に色々なシンボルがあり、画面下部に「Zero-Width Space (ZWSP) Character」あるので、コピーして後はペストすればいい。

普段仕事上めったに<200b>にあうことはないが、自分は今日仕事上遭ったため、調べてブログにした。 インターネット上で調べている方のいい参考になれればと思います。

参考資料