android 客户端无法解析php服务端返回的json

这个东西纠结了几个小时。。找到解决方法。。

http://blog.163.com/www_iloveyou_com/blog/static/211658372201401443815323/

很简单的一个json字符串: {“statu”:”1”,”results”:”true”},明显看着是没什么格式错误的,然后用各种json格式校验工具检测也都没什么问题,但程序里就一直报错。
google之后发现是BOM报头问题。服务器端是php,返回的接送数据’{‘前有bom报头,java读的时候把报头直接当作文件内容读,然后就会出错。
一般是服务器端代码格式的问题

BOM报头又叫UTF-8签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器 识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行,一般的php代码如果用记事本等软件编辑保存过之后,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。(还不清楚为什么会在返回数据时候也自动加上了BOM报头)。

java、android客户端等可以通过代码过滤掉bom,然后再解析。

/** * 去除bom报头 */public static String formatString(String s) {    if (s != null) {          s = s.replaceAll("\ufeff", "");    }    return s;}

不管有没有把这个方法加到解析json方法的前面去,这样可以让程序更健壮。

以上
因为服务器是windows的,我本地是gvim编写然后远程登陆部署上去,部署上去之后服务器上没有gvim,就用windows自带的文本编辑器编辑了,卧槽,问题居然出现在这里。。。

更多相关文章

  1. Android Studio添加so文件并打包到APK的lib文件夹中
  2. android studio打包 so文件
  3. android 6.0后usb otg设备不显示在文件管理器中
  4. 将Activity打包成jar文件
  5. Android学习笔记(六)-文件操作与SDCard读写访问
  6. Android实现在xml文件中引用自定义View的方法分析

随机推荐

  1. 编译安装libevent,memcache,以及php的memca
  2. tp5 ThinkPhp5 自定义异常处理类
  3. ThinkPHP框架快捷键使用说明
  4. 数据库分卷备份 thinkphp3.2版
  5. PHP的SOAP扩展原理和使用(转)
  6. 如果ROW2包含“string”,MySQL会更改ROW1
  7. Ubuntu 9.04:Pecl扩展名下载但不安装
  8. 跟踪PHP中的登录用户
  9. php连接mssql两种方法(com & pdo)
  10. 本机PHP函数将授予我直接访问字符串部分