zoukankan      html  css  js  c++  java
  • 遇到一个json解码失败的问题

    今日批量导入游戏, 从别人接口拉去的字符串json_decode总是失败, 但是把log里面记录的解码失败的字符串copy出来单独解析,却可以成功. 排除了是字符编码的问题后, 还是不行, 百思不得其解.

    只好二进制对比, 把接收到buf和我打印到log对比, 发现还真存在一些差异

    分析:
    一个一个字节对比, 发现从第373个字节开始不匹配. 一个是9=> , 一个是32对应空格.
    373 not equal, org:9 , new:32 , 原来, 如果字符串中含有 字符, 就会解码失败.

    而我log里面记录的字符串, 我在copy字符串到其他地方解析时, 自动被转换为了空格. 

    总结:
    json 编解码 json_decode json_encode失败
    1) 对于php json_decode失败, 原因可能是
    a) 输入的字符串不是utf-8的, 可以用 mb_detect_encoding 检测出字符串的编码类型.
    解决:如果不是utf-8, 可以使用iconv转换. utf8_encode函数慎用! 其总是认为输入字符串为ISO-8859-1编码的!!.
    b) 输入字符串中含有 回车等隐藏的不可见字符.
    eg对于如下字符串会解码失败:
    $str = "{"ret ": 0}"; 去掉 则可以解码成功
    解决: $str = strtr($str, " ", ' '); 把 都替换成空格.

    生命不止,奋斗不息
  • 相关阅读:
    3.24
    3.23
    构建之法读书笔记2
    寒假学习day23
    寒假学习day22
    寒假学习day21
    寒假学习day20
    寒假学习day19
    寒假学习每周总结4
    寒假学习day18
  • 原文地址:https://www.cnblogs.com/shione/p/7103866.html
Copyright © 2011-2022 走看看