遇到一個狀況:有一支靜態的 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() 就好?不過因為我這邊處理不到,所以等之後合作夥伴處理好再來補完心得了。

 

 

arrow
arrow
    文章標籤
    json javascript
    全站熱搜

    小攻城師 發表在 痞客邦 留言(0) 人氣()