広告が嫌いですか? 行く 広告なし 今日

スペースは見えないが、バグは見えない——そのスペースを削除して、あなたの日々を破壊しないように

更新日

スペース、非表示スペース、およびゼロ幅文字は、JSON、SQL、CSV、およびAPI呼び出しにおいて静的失敗を引き起こします。なぜそれが起こるのか、どこに隠れているのか、そして5秒以内に見つける方法について説明します。

スペースは見えませんが、バグは見えません——デイ1にトリムして、あなたの日を破壊しないでください

それは金曜日の3時47分でした。あなたはコンフルエンスからAPIキーをコピーし、設定ファイルに貼り付け、デプロイしたところ、アプリがすぐに認証できなくなりました。キーを確認すると、見た目はまったく同じでした。ログを確認すると—— 401 Unauthorized。あなたは47分間、すべてのステップを再確認し、ドキュメントを再読み込み、キーを再生成しましたが、それでも問題が解決しません。

そして、まったく偶然に、そのキーの最後までカーソルを置き、Deleteキーを押しました。目に見える変化はありません。デプロイしたところ、問題が解決しました。

末尾にスペースがありました。それがすべてのバグでした。

無視されるバグのクラスへようこそ。誰も警告してくれないバグのクラスです。

いつもの容疑者

スペースバグはすべて同じではありません。ここに悪役のギャラリーを示します:

  • 末尾のスペース — クラシックなケース。最後の文字の後にスペースが入っているが、ほとんどのエディタでは見えません。コンフルエンス、ノート、またはブラウザのアドレスバーからコピー・ペーストすると、これらが確実に追加されます。
  • 非破損スペース(U+00A0) — 見た目は普通のスペースのように見えますが、実際には異なります。ワード、Googleドキュメント、または他の富テキストエディタから貼り付けた場合、これらが現れます。文字列比較では静かに失敗します。
  • ゼロ幅文字 — U+200B、U+FEFF、U+200C。まったく見えません。悪質にエクスポートされたPDFや特定のCMSシステムからコピーされたテキストに現れます。JSONパーサー、正規表現、そしてツールに対するあなたの信頼を破壊します。
  • 複数の改行 — Windowsは送信します \r\n、Unixは送信します \n。Windowsマシンからスクリプトをコピーし、Linux上で実行すると、そのような不正な破壊が起こります。
  • 先頭のスペース — 内容の前にタブまたはスペースが入っている。CSVエクスポートや貼り付けられた設定値でよく見られます。

実際に問題を引き起こす場所

JSONパーサー

あなたのJSONは技術的には有効です。パーサーはそれを読むことなく不満を示しません:

{
  "api_key": "sk-abc123 "
}

値は "sk-abc123 " — 末尾のスペースが含まれています。認証呼び出しは失敗します。APIログはキーが無効であると表示します。あなたは画面に表示される内容がまったく同じであることに20分間見つめ続けます。

SQLクエリ

-- These look the same. They are not.
SELECT * FROM users WHERE username = 'admin ';
SELECT * FROM users WHERE username = 'admin';

いくつかのデータベース(MySQLの特定のパディング設定)はこれらをマッチさせますが、他のデータベースはそうしません。また、フォーム入力の値をトリミングせずに保存した場合、あなたは重複ユーザー—— adminadmin — そして説明できないサポートチケットを持ちます。

CSVインポート

ヘッダーに末尾のスペースがあると、コードで参照する際に列名が不一致になります。インポートは成功のように見えますが、下流スクリプトは KeyError: 'email' とエラーを返します。実際の列名は 'email ' — スペースが含まれていることに注意してください。

APIレスポンスとシークレット

ウェブホークシークレット、OAuthトークン、.env値など、すべての被害者です。HMAC署名の検証が一致しないのは、シークレットに貼り付けたときに含まれた改行が原因です。シークレットは見た目は問題ありません。比較は常にfalseを返します。

前と後:実際に持っている文字列

ここに、あなたが持っているものと実際に持っているものとのギャップを示します:

あなたが持っているもの実際に持っているもの
"api_key": "abc123""api_key": "abc123 " (末尾のスペース)
SECRET=mysecretSECRET=mysecret + 見えない改行
CSVヘッダー: emailCSVヘッダー: email (先頭のスペース)
ユーザー名: adminユーザー名: admin + 見えないゼロ幅スペース

その最後の行は特に悪く、ゼロ幅スペースはまったく見えませんが、文字列比較や検索をすべて破壊します。

解決策(5秒)

問題のある文字列を 空白トリマーに貼り付けます。これは先頭および末尾のスペースを削除し、改行を標準化し、ゼロ幅文字を削除して、実際に隠れていたテキストを表示します。

1回の貼り付け、1回のクリック。無視されるバグが午後の時間を無駄にしなくなります。

エディタがそれを見つけなかった理由

ほとんどのエディタは、設定していない限り、末尾のスペースを視覚的に表示しません。VSCodeでは editor.renderWhitespace: "all" — デフォルトでオフです。Vimでは set list listchars=trail:· — 多くの人が設定していません。

富テキストソースは最悪のケースです。コンフルエンス、ノート、ワード、Googleドキュメント——これらは単なるスペースを挿入するだけでなく、非破損スペース(U+00A0)、カーニングクォート、enダッシュ、および標準ASCIIに見えるが比較チェックを失敗する他の文字を挿入します。これらをいずれかのエディタから設定値やトークンフィールドに貼り付けると、あなたのエディタがフラグしない無視される文字が含まれている可能性があります。

あなたを救う1つの習慣

何かがコピー・ペースト後に壊れた場合、最初のデバッグステップ——それ以外のすべての前に——隠れたスペースを確認することです。それは常に問題であるとは限りませんが、5秒で1クラスの静かな失敗を排除できるためです。

問題のある値を オンラインのスペーストリムツールに貼り付けます。出力が入力とまったく異なる場合、あなたはバグを見つけました。異なる場合がない場合、1つの原因を排除し、次のステップに進めます。

これは華やかなデバッグではありません。誰にも言わないようなデバッグです。しかし、次の度にチームの誰かが45分も末尾の改行に苦しんでいるとき、あなたが「スペーストリムツールを試していませんか?」と尋ねて、正しく答えます。

広告なしで楽しみたいですか? 今すぐ広告なしで

拡張機能をインストールする

お気に入りのブラウザにIOツールを追加して、すぐにアクセスし、検索を高速化します。

に追加 Chrome拡張機能 に追加 エッジ拡張 に追加 Firefox 拡張機能 に追加 Opera 拡張機能

スコアボードが到着しました!

スコアボード ゲームを追跡する楽しい方法です。すべてのデータはブラウザに保存されます。さらに多くの機能がまもなく登場します!

ニュースコーナー 技術ハイライト付き

参加する

価値ある無料ツールの提供を継続するためにご協力ください

コーヒーを買って