2013年9月23日 星期一

Textarea 裡面有 "00" 導致顯示內容中斷問題

下午在演示新版機器人程式時, 發現機器吐出的 log 竟然沒有全部顯示在 textarea 裡面, 從中間斷掉了, 原先還以為指令運行錯誤, 檢查後發現原始 log 內容完整, 為什麼用 FileSystemObject 讀取後竟然只顯示一半在 textarea 中呢? 於是我把讀取進來的 log 檔案內容反手寫出去, 嘿嘿, 規髒呵呵 (完整無缺啦), 足證問題出在 textarea 跟內容裡的某些東西 "相剋" 所致.



我用 HxD Hexeditor 載入 log 檔, 找尋內容斷裂點, 發現斷裂位置是在跳行前出現的 "00" 這個 byte (如上圖中的 00 0D 0A 序列, 其中 0D 0A 分別是 CR LF 回車與換行字元), 這是 non-ASCII 編碼, 難怪用 EditPlus 開啟時會問要用何種編碼開啟, 試到最後只有 Western European 可以, 就是這個奇怪的 "00" 造成的, 而且整個 log 檔裡只出現一次. 該怎麼清掉這壞東西, 好讓 log 內容完整顯現呢? 很簡單, 先用 escape 轉成 Latin1 碼, 再用正規表示法的 replace 把 幹掉, 最後用 unescape 轉回 ASCII 碼即可 :

var log=read_file("20130923.log");  //用 FSO 檔案函式庫讀取 log 檔
log=unescape(escape(log).replace(//g, ""));  //把 "00" 碼清掉

沒有留言 :