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里有相应的过滤源码,不过还没深入看,并不确定,有空在仁兄可以抽出来剖析剖析。

 

转载于:https://www.cnblogs.com/benna/archive/2012/04/17/2454145.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值