json無法解析的特殊字符(控制碼)


環境:

  iOS客戶端,VS2010下編寫的服務端,數據庫SQL2005

json庫http://stig.github.com/json-framework

  json解析時,遇到一些控制碼將會出錯,造成數據解析失敗。之前測試過了客戶端提交的數據和服務端獲得的數據(存入數據庫前)一致,因此編碼轉換並沒有出錯,因此編碼不一致的問題排除。

網上查到過濾的僅是\b, \t, \n, \f, \r, \\, \'', /, 普遍的做法為:

View Code
 1 static StringBuffer string2Json(String s) {       
 2     StringBuffer sb = new StringBuffer ();       
 3     for (int i=0; i<s.length(); i++) {       
 4      
 5         char c = s.charAt(i);       
 6         switch (c) {       
 7         case '\"':       
 8             sb.append("\\\"");       
 9             break;       
10         case '\\':       
11             sb.append("\\\\");       
12             break;       
13         case '/':       
14             sb.append("\\/");       
15             break;       
16         case '\b':       
17             sb.append("\\b");       
18             break;       
19         case '\f':       
20             sb.append("\\f");       
21             break;       
22         case '\n':       
23             sb.append("\\n");       
24             break;       
25         case '\r':       
26             sb.append("\\r");       
27             break;       
28         case '\t':       
29             sb.append("\\t");       
30             break;       
31         default:       
32             sb.append(c);       
33 34     return sb.toString();       
35  }    

對於上述控制符,該庫中已經做了過濾。

最終,在實際的數據傳遞(以UTF-8編碼傳遞,因為ios中默認為UTF-8)中,會發現一些內容里存在另外一些控制符。

例如:

utf-8下,hex為0x14,source code為“\u0014”的字符,這個字符的name為DEVICE CONTROL FOUR。關於這個字符的詳細介紹請點這里,另一些控制符列表可看這里

我們用的這個第三方庫並不能過濾如上所說的控制符。

解決:

  在服務端替換了一個json庫(json.net),新的json庫將內容中的控制符都過濾掉了,貌似在JsonTextReader里有相應的過濾源碼,不過還沒深入看,並不確定,有空在仁兄可以抽出來剖析剖析。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM