問題現(xiàn)象
- 同事開發(fā)的一個(gè)功能中,需要通過httpclient調(diào)用了一個(gè)rest接口,然后將返回的json轉(zhuǎn)成java對(duì)象,結(jié)果發(fā)現(xiàn)在解析json時(shí)報(bào)錯(cuò),vim中顯示如下:
net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of <feff>{"code":"200","msg":"操作成功","result":{"id":"14885..28130","status":"201","items":[{"id":"14885..545130"}]},"sign":"ccc3a2fda..ccd23cf56c9e"}
可以看到j(luò)son串有個(gè)<feff>,百度之后發(fā)現(xiàn)這也是一個(gè)BOM頭,原來只在xml文件的解析中碰到過,還是第一次碰到在接口的返回值中碰到。
- 注:在vim中能直接看到<feff>,在windows下只能看到一個(gè)問號(hào)或者點(diǎn)。
解決辦法
接下來解決就比較方便了,把調(diào)用方的文件編碼和服務(wù)方的文件編碼都統(tǒng)一改成utf-8,重啟后,問題消失了。
結(jié)論:培養(yǎng)好的編碼習(xí)慣能有效的避免這種“高級(jí)”問題,一個(gè)團(tuán)隊(duì)里面也許要一個(gè)解決問題的高手,但是需要更多的擁有好的編碼習(xí)慣的實(shí)在人。