遇到一個狀況:有一支靜態的 JSON 檔,假設是 test.json 好了,我們把它放在共用目錄,分別可以經由以下路徑取用:
- 主機一:http://192.168.1.1/test.json(此 server 為 Windows 主機)
- 主機二:http://192.168.1.2/test.json(此 server 為 Linux 主機)
兩台主機都是跑 Apache 2.4,不確定到底是哪條設定,會造成在不特定的時間裡,test.json 會被加入一大串亂碼。
從 VIM 看,亂碼的內容是 ^@,透過 Google 的自動提示查了 "^@ character in vi",據說這個文字是 \x00。
本來以為只要用 trim() 或是清理掉 JSON 裡的空白字元就好,照著 "JavaScript: how do I remove all the white spaces from a JSON string except the ones in the values?" 用 JSON.stringify() 包起來,可是都不管用。
後來在 JavaScript 用 JSON.stringify(console.log(e.responseText)) 把 JSON 字串印出來,發現那串亂碼又會變成 \u0000。若直接在 JavaScript 取代字串 \u0000,仍然無法把字元消乾淨,後來試了一下,要做兩次取代:
e.responseText.replace(/\u0000/g, '').replace(/\\u0000/g, "")
照 stackoverflow 的 "Java - removing \u0000 from an String" 來看,第一次的 \u0000 是取代 null 字元,第二次取代 \\u0000 是取代 Unicode 文字 (\+u0000)。
其實 \u0000 是 null,後來也猜測可能是產出 test.json 的 Java 程式加個 trim() 就好?不過因為我這邊處理不到,所以等之後合作夥伴處理好再來補完心得了。
留言列表