bom报头错误

android解析json出错:JSONException: Value of type java.lang.String cannot be converted to JSONObject。

很简单的一个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;}
这个bom问题真是困扰了很久。。。

服务器端过滤掉bom可以参考这篇文章:
PHP去除BOM头

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,860评论 25 708
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399
  • 只有在庄生的梦里 你把自己藏进了一个新的世界 一个脚印又一个的 都开出了花 在潮起潮落的暗夜里 你是怎么习惯的 因...
    风趣先生阅读 761评论 0 3
  • 能他说往事重提是折磨,可是回忆犹如困兽寂寞太久而渐渐温柔。 当一个女人不再爱你的时候,那是因为你已经不在她心里了。...
    李蘑菇i阅读 279评论 0 0