追記
なんか同じ記事を投稿してしまいました。しかしながら最新の環境では動作しなかったのでついでに訂正し、前の記事を旧バージョン用とします。
はじめに
Chromium アプリケーション(例:Google Chrome、Visual Studio Code、Edge、Microsoft Teams など)と Excel でコピペを繰り返すと余分な空白が付く場合があります。これは Non‐breaking space というもので、ブラウザの表示の都合上で使われます。文字コードでは(U+00A0)です。
コンピューターにそのまま渡す文字列(たとえばコードスニペット)を上記アプリケーションでやり取りしたりすると問題が発生することがあります。Visual Studio Code から Excel にコピペしたり、Teams でスニペットを共有するとよく発生します。
発生する問題
コンパイルエラーになったり、実行時エラーになったりします。
とくによく起こるのは、Object Browser や A5M2 で SQL が実行エラーになる問題です。それらの内部エディタでは不正な空白文字を、とくに強調はしてくれないので、原因を見つけるのが困難です。
発見する方法
メインのテキストエディタが Visual Studio Code の場合、VSCode にコピペすると強調してくれるのでよく判ります。
Replace U+00a0 (nbsp) (or other unicode) characters with VS Code | Karsten's Blog
除去する方法
VSCode なら、置き換え機能で [\xa0] を半角空白に置き換えると解決します。その他のテキストエディタでも、同様の方法はあります。
サポンテは「クリップボードに格納された文字列に含まれる(U+00A0)を除去する PowerShell スクリプト」を作り、Launchy で起動しています。
スクリプト
上記の PowerShell(バージョン 7.4 以降)のスクリプトを以下に置いておきます。
Set-StrictMode -Version Latest # クリップボードからテキストを取得する $clipboardContent = (Get-Clipboard -Format Text) # 空白を置き換える $replacedContent = ($clipboardContent -Replace "[\p{Zs}]", " ") # 垂直タブを置き換える $replacedContent = ($replacedContent -Replace "[\v]", " ") # 変更したテキストをクリップボードに書き戻す Set-Clipboard $replacedContent
上記の PowerShell スクリプトを呼び出すバッチファイルの内容は以下です。
powershell -ExecutionPolicy Bypass .\nbsp_remover.ps1
