最近做一个小东西,客户端用到AsyncHttpClient做get请求,服务端接收处理数据,然后存储到mysql,再从mysql读取数据回传给客户端。
传输数据中需要使用中文,于是乎,各种乱码问题搞了好久,今天总算搞定,在此记录一下,备查。
AsyncHttpClient中文编码
先解决AsyncHttpClient的中文编码问题,AsyncHttpClient将客户端请求数据发送给服务端之前,内部将字符串编码转换成了ISO-8859-1,也就是latin1,于是乎,客户端好好的utf8,传到了服务端再直接传回客户端,也变成了乱码。
自己测试了n次,网上又搜了一圈,才发现是AsyncHttpClient搞的鬼。
搞清楚原因,那么解决方法就很简单了:
在服务端将接收到的数据转换成utf-8,方便后续各种处理。
示例代码如下:
String info = new String(request.getParameter("info").getBytes("ISO-8859-1"), "utf-8");
MySql中文编码
第一个坑解决了,那么来第二个坑。
数据保存到数据库的时候提示出错了,data turncated。
估摸着应该又是中文的锅了,于是又搜了一圈,发现是表内数据编码的问题。