JsonParseException: Unexpected character ('?' (code 255))

来源:互联网 发布:淘宝特卖商城女装 编辑:程序博客网 时间:2024/04/26 08:43

今天再次调试客户端上传JSON数组的、后台接收的功能。

好像是之前改过客户端程序,今天发送的时候后台报错:

JsonParseException: Unexpected character ('?' (code 255))

看来又是后台接收到的JSON格式有误。

解决思路:查看一下发送的JSON内容究竟是怎样的,格式是否正确?


第一步,查看从文本文件中读出来的JSON数组,查看客户端控制台:


是标准的JSON格式,也就是说,这一步没问题。

第二步,查看从客户端发送后的HTTP内容,用HTTP工具查看:


问题来了,发出去的字符串,有乱码的情况,JSON格式被打乱了,后台无法进行JSON处理,因此报错。

再观察一下编码问题:


以ff开头,并不是UTF-8编码。

原因找到了,也就是在发送环节出现了编码问题。于是找到发送代码:

DataOutputStream dos = new DataOutputStream(conn.getOutputStream());  dos.writeBytes(content);//问题出在这一句

前面从文本文件中读出字符串时用的是UTF-8编码,而在向网络发送时,直接用了writeBytes(),而没有指定编码,所以问题很有可能就在这一步。

于是修改一下发送代码,指定编码格式:

DataOutputStream dos = new DataOutputStream(conn.getOutputStream());  dos.write(content.getBytes("UTF-8"));


发送成功!


再次观察一下发送内容:


JSON格式正确,没有乱码问题。

再观察一下编码:



以ef bb bf 开头,这次是UTF-8格式了,正确。


总结:

这个JSON无法解析,非法字符的问题,已经遇到了好几次,大概的原因总结如下:

1. 非技术性的:笔误,打错字了,例如把英文逗号打成了中文逗号,把英文双引号打成了中文双引号。

2. 技术性的:编码问题,前后编码不一致。


还有其他原因,也可依照类似的思路进行推导。





0 0
原创粉丝点击