grep -nP '[\x{200b}-\x{200d}\x{feff}]' .env
python3 -c "s=open('.env',encoding='utf-8').read();print([hex(ord(c)) for c in s if ord(c)>127][:5])"

复制了一行 API KEY 到 .env,程序读到的值长度比看到的少 1,鉴权一直返回 401 invalid signature。diff 两个文件显示完全相同。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,U+200B 零宽空格不可见,编辑器里光标也会跳过它。它夹在键名或值中间,肉眼和 diff 都看不出差异,参与签名哈希时字节却变了。

「零宽字符」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。

处理上按这个顺序:用 cat -A 或 xxd 看不可见字符;用正则清掉 \u200b \u200c \u200d \ufeff 再比对;密钥改成从文件读取 避免手动复制;加载后打印长度校验 不打印内容。

改完只确认一件事:鉴权返回 200 清理后密钥长度和后台显示的一致。

作者 9823189