【VScode】excelからvccodeにコピーして非文字化け(非表示文字)したときの解消法

Last Updated on 2023年10月18日 by らくろぐ

この記事は2023/2/23に更新しています。

Excelの一覧をVScodeで貼り付けたら文字化けしていた

エクセルに書いた文字列(ソースコードやバッチファイル等のスクリプト)をVScodeにコピーしたら、意図しない文字コードに変換されてしまう(いわゆる文字化け)ということがありました。

しかし文字化けしていることに気が付かなかったため、記述しているスクリプトの内容に不具合があると勘違いし、その解決のためにハマってしまい、しばし作業が滞ってしまったので備忘録もかねてご紹介します。

どういうことが起きたのか

Test<sp> 

Testという文字の後ろにスペース(spと表現)を入れた状態で、VScode にコピーしたら、エディタ側ではなぜか非表示文字(u+00a0)という表示になりました。

非表示文字は”ノーブレークスペース”とも呼ばれ、テキスト文字列がスペース箇所で自動で改行する際に、改行させてしまうと不適切な表現になる箇所に改行させないための特別な固定位置を示します。

もともと参照していたテキストファイルはバッチファイルでした。そのため、エクセルを使ってバッチファイルと同じ処理を文字列連結して作成したかったためあえてエクセルにテキスト文字列を入力するという操作を行っています。

このエクセルに書いた文字列をVScodeにコピーしたときに、非表示文字が入ってしまったために、(見えないが故に)

  • 文字列コピーが意図した形にならない
  • 文字列検索が意図したものが見つけられない

といった現象に遭遇しました。文字列の条件が間違っているのではないかと、その調査に時間を取られましたが、結局のところ、スペースが非表示文字に変換されていたことが原因でした。

想定される原因

VScodeへコピーをした際に、文字列を追加することで非表示文字がはいってしまった。

どこで文字コードが変わったのかをみると時系列的に見てみました。

  • VScode:スペース→”%20” これをエクセルにコピー
  • Excel :スペース→”%20” これをVScode にコピー
  • Vscode:スペース ”%20%C2%A0” 
    • この時に C2A0の非表示文字(ノーブレークスペース)が後ろについてしまったと想定

解消方法

コピーを繰り返すことで知らず知らずのうちに文字列が長くなり、テキストに自動で入るノーブレークスペースが付与されてしまったのではないかと考えています。なぜなら同じ手順で繰り返しても、再現できないからです。この時はたまたま文字列が長くなっていて(実際にこの時に入れていたトータルの文字列自体は失念してしまい、思い出せません)、現象が発生したのではないか、と思ています。

ただ、この現象に遭遇した場合には、文字列をテキストではなく、バイナリで見ることで実際の文字コードを確認すれば、スペース(20)なのか、ノーブレークスペース(C2A)がすぐにわかります。

バイナリは、バイナリエディタを使うか、VScodeにもバイナリで開く方法があるのでそれを使って確認することができます。

エクセルにVScodeからコピーした際の文字化け まとめ

VScodeとエクセルとの間で文字列をコピーする際に、文字化けが発生閉まった件、原因も含めて紹介しました。

ノーブレークスペースは見た目には何も見えない(非表示文字)なので、テキストベースでは原因の特定が難しく、無駄な時間を要することになります。

文字列操作で意図しない挙動をする場合は、すぐにバイナリエディタで文字コードを確認する癖をつけると、効率よい作業を進められることでしょう。

参考になればうれしいです。