今天在用node.js的時候,需要手動去寫一個bat文件來配置環境變量。在設置環境變量中的某一個密碼時,卻發現base64之后的encode和正確的不一致。
先是試驗了一下直接將密碼在js登錄文件中明文指定,發現可以登錄。然后再去打日志,發現是從讀取bat文件開始就出了問題。所以問題定位到bat文件上。
開始懷疑是字符編碼的問題,於是就試圖將bat文件編碼從UTF8改為ANSI,但是即使如此仍然無效。
在即將准備放棄的時候,突然想起來去檢查一下bat中特殊字符的問題。原來總是在中文字符和英文字符的轉換里面繞,卻忘記了特殊字符轉義的可能性。
果然,發現了這么一段話:
“
^
\\取消轉義字符,即將所有轉義字符的轉義作用關閉。比如要在屏幕顯示一些特殊的字符,比如> >> | ^等時,就可以在其前面加一個^符號來顯示這個^后面的字符了,^^就是顯示一個^,^|就是顯示一個|字符了;
在set/a中是按位異;
在findstr/r的[]中表示不匹配指定的字符集。
”
因為自己的密碼中大量出現了“^”,因此將所有的“^”改為“^^”,結果成功。
其實這沒有任何技術含量,完全是思維嚴密性的考慮。首先是不同語種的轉換,其次是文件本身定義的特殊字符。其實最后還有不同命令下的特殊字符,比如正則等等。這才應該是最標准的解決思路。