Android中POST请求中的UTF-8编码问题
来源:互联网 发布:演唱会市场怎样 知乎 编辑:程序博客网 时间:2024/05/23 21:28
下面本文章来给各位同学介绍一个关于Android中POST请求中的UTF-8编码问题解决办法,如果你碰到不防进入参考。
今天遇到这样一个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中POST请求中的UTF-8编码问题
- 【okhttp】Post请求设置utf-8编码(解决汉语请求乱码问题)
- spring+mvc get请求,post请求编码问题(utf-8)
- HttpClient POST 的 UTF-8 编码问题
- HttpClient POST 的 UTF-8 编码问题
- android http post请求,设置utf-8编码,服务端还是出现中文乱码 解决
- iOS 中的编码问题(get请求 post请求等)
- UTF-8编码中的BOM问题
- post&get请求编码问题
- OkHttp post请求编码问题
- GBK,UTF-8,和ISO8859-1编码区别与get,post请求中文乱码处理
- UTF-8编码问题
- Ajax框架(UTF-8编码),POST传输
- 关于linux中mysql中编码的问题(UTF-8)
- 关于linux中mysql中编码的问题(UTF-8)
- POST请求中URL需要编码吗?
- UTF-8编码问题编码长度问题
- J2ME UTF-8编码 URL请求
- weblogic各种线程数的关系的看法
- 批处理批量更改文件名称
- 直接拿来用!十大Material Design开源项目
- 开始刷leetcode day12:Best Time to Buy and Sell Stock
- 详解android Activity之间数据传递 Parcelable&Serializable
- Android中POST请求中的UTF-8编码问题
- [leetcode]Course Schedule II
- Gallery图片浏览
- spring学习笔记(25)——spring基本思路
- android intent-infliter 过滤验证
- leetcode笔记:2Sum
- python
- 阻塞、非阻塞、异步、同步、I/O、select、poll、epoll
- 利用volley进行http设置请求头、超时及请求参数设置(post)