android POST数据遇到的UTF-8编码(乱码)问题解决办法

时间:2022-09-12 22:31:46 

今天遇到这样一个bug:客户端POST到服务器的一段数据导致服务器端发生未知异常。服务器端确认是编码转换错误。于是截取网络数据包进行分析,发现客户端POST的json数据中包含下面一段(hex形式):

... 61 64 20 b7 20 52 69 63 ...


问题就出在这个b7上。查阅Unicode代码表后发现,U+00b7是MIDDLE DOT,它的UTF-8表现形式应该是c2 b7,但为何客户端发送的数据中它变成了b7?

由于系统使用了ormlite、gson和async-http几个库,于是逐一排查。最后发现原来是向服务器发送数据时没有指定文字编码,导致async-http(实际是apache common http client)将数据以ISO-8559-1格式发送,U+00b7被编码成b7,然后服务器试图使用UTF-8解码时发生错误。

出错的代码片段如下:


Gson gson = new Gson();
String json = gson.toJson(data);
StringEntity entity = new StringEntity(json);
httpClient.post(context, url, entity, "application/json", new TextHttpResponseHandler() ... );


第三行new StringEntity(json)时没有指定编码导致错误。改正后如下:


Gson gson = new Gson();
String json = gson.toJson(data);
StringEntity entity = new StringEntity(json, "utf-8");
httpClient.post(context, url, entity, "application/json;charset=utf-8", new TextHttpResponseHandler() ... );

标签:android,UTF-8
0
投稿

猜你喜欢

  • C# SQLite事务操作方法分析

    2022-11-23 11:15:01
  • Android实现左滑删除控件

    2023-03-02 21:36:49
  • Flutter web bridge 通信总结分析详解

    2022-05-23 05:15:42
  • c#调用c++的DLL的实现方法

    2023-10-27 05:27:40
  • Java实现的日期处理类完整实例

    2023-12-08 00:16:10
  • 微信小程序获取手机号,后端JAVA解密流程代码

    2023-11-29 07:57:26
  • Mybatis与Ibatis的区别

    2022-11-19 14:27:42
  • IntelliJ IDEA使用git初始化仓库的使用方法

    2022-05-24 12:37:26
  • java之static关键字用法实例解析

    2023-11-21 14:42:49
  • Android中Canvas的常用方法总结

    2021-11-25 03:00:28
  • Netty分布式高性能工具类同线程下回收对象解析

    2023-05-24 22:00:55
  • Java通过XPath获取XML文件中符合特定条件的节点

    2023-01-19 07:42:34
  • 老生常谈C/C++内存管理

    2022-05-07 02:17:10
  • spring+html5实现安全传输随机数字密码键盘

    2023-04-05 13:46:39
  • 进度条ProgressBar及ProgressDialog(实例)

    2021-09-24 01:07:42
  • C#利用递归算法解决汉诺塔问题

    2022-04-29 23:04:10
  • java实现简单超市管理系统

    2022-04-03 07:41:04
  • 详解如何用c++实现平衡二叉树

    2023-11-30 21:29:44
  • 使用Enumeration和Iterator遍历集合类详解

    2023-01-05 11:57:51
  • Mybatis中的like模糊查询功能

    2023-09-25 11:57:28
  • asp之家 软件编程 m.aspxhome.com