【見えない文字】
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のような高機能な環境だと対策がされており、便利な世の中になったと感心してしまいました。