遇到一个状况:有一支静态的 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() 就好?不过因为我这边处理不到,所以等之后合作伙伴处理好再来补完心得了。

 

 

相关文章