http response \ufeff

前幾天遇上從 server api 拿到的 response 會在第一個字元收到 \ufeff,jquery 的 ajax 會直接 fail,但直接看 response 會發現 status code 一樣是200,json 的內容也是正常,但 ajax 就是會變成 fail。

目前查詢到的資料來看,這是 utf8(BOM) 的問題, IDE 的編碼在儲存時如果編碼為 BOM 會在第一個字元插入\ufeff,而\ufeff這字元是個特殊的空白字元,一般的 IDE 會自動把這濾掉,所以你將 response 貼上 IDE 想要檢查問題出在哪一般也看不到,建議使用 vim 來看,會清楚的看到這字元,或者 chrome 的 inspect 也會發現如下圖的紅點:


其實這問題看起來真的跟使用的語言無關,似乎與 IDE 關係比較大,從 google 搜尋看起來就是跟網路相關的語言都容易碰上(如下圖)


Nodejs 的 V8 會自動將這字元濾掉,除非你連續寫了兩個\ufeff,不然不會發生,其他語言可能就要注意一下,在發生這問題請不要懷疑自己寫的 code,應該先去查 IDE 的編碼,而這問題也不會是前端的問題,由 server side 處理更為恰當。

沒有留言:

張貼留言