0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【見えない文字】

Unicodeで文字を書いていると、時々見えない文字が混入することがあります。よく出会うのはゼロ幅スペースです(U+200B, U+2060, その他)

U+200B は、長い英単語の中で、表示の都合で改行するならここで、という制御です。
U+2060 は逆の意味で、ここでは改行しないで、という制御ができます。

コーディングの際、これらの文字をうっかりコピペしてしまうと大抵バグになります。このバグに遭遇した際、「こんな邪悪な文字を作ったのは誰だ」と言いたくなりますが、下記のようによくまとめられた情報とセットで覚えておくと何か良いことがあるかもしれません。邪悪な文字が作られた歴史をちょっとでも知っていると、ゼロ幅スペースに悩まされたときに心が穏やかなまま対応できるのではないでしょうか。

Chienomi - UnicodeWordJoinerとウェブブラウザ: https://chienomi.org/articles/technology/202001-unicode-word-joiner.html

ソースコードに混入したときの探し方

grep

混入した文字がわかってるときは

grep -r $'\u200B'

のように狙い撃ちで検索、

grep -r -e $'\u200B' -e $'\u200C' -e $'\u200D' -e $'\uFEFF'

のように怪しい文字コードを手あたり次第探してみる、というのが原始的ですが効果があります。
gitbashでも動いたので、windows環境でもローカルにgitbashがあればOKです。

エディタの正規表現検索を使う

 機能が多いエディタは検索機能で正規表現を使うことができるものも多いです。適当なUnicodeに引っかかりそうな条件で検索したとき、コメント以外のところにヒットしたらそこが怪しいです。

IntelliJを使う

 なんとIntelliJはデフォルトでゼロ幅スペースの類を強調表示してくれるのでこういったバグに悩まされることがありません。

まとめ

 情報をまとめたということは、ハマったということです。似たような内容のコンテンツはインターネット上にたくさん存在しており、昔からエンジニアを悩ませてきた定番コンテンツであることは承知しているのですが、IntelliJのような高機能な環境だと対策がされており、便利な世の中になったと感心してしまいました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?