AsyncHttpClient+mysql 中文乱码问题

本文记录了在使用AsyncHttpClient进行HTTP请求时遇到的中文乱码问题及其解决方法,包括服务端如何将接收到的数据转为UTF-8以及在MySQL数据库中处理中文编码的步骤,如修改数据库和表的编码格式为UTF-8。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做一个小东西,客户端用到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。

估摸着应该又是中文的锅了,于是又搜了一圈,发现是表内数据编码的问题。

由于表是之前创建的,最初创建的时候,使用的默认的latin1编码,这次插入中文数据,就异常了。

其中一个解决方案如下:

删除数据库,然后新建,然后设置数据库的编码为utf8,示例如下:

alter database info character set utf8;

新建表,记得新建的时候指定字符编码utf8,示例如下:

create table if not exists userinfo(userName varchar(30), pwd varchar(20), info text)default charset utf8

另外,连接数据库时,需要指定使用utf8编码,否则各种语句含有中文时,就会有异常。

指定使用utf8编码连接的代码如下:

public static final String url = "jdbc:mysql://127.0.0.1:3306/info?useUnicode=true&characterEncoding=utf8";
    public static final String name = "com.mysql.jdbc.Driver";  
    public static final String user = "root";  
    public static final String password = "123";  
  
    private static Connection conn = null;  
  
    public static Connection getCon(){
    	if(conn != null){
    		return conn;
    	}
    	
    	try {  
            Class.forName(name);//指定连接类型  
            conn = DriverManager.getConnection(url, user, password);//获取连接
        } catch (Exception e) {  
            e.printStackTrace();  
        }
    	
    	return conn;
    }


另外,附上一个查看编码的语句:

show variables like 'char%';

以上,要保证数据库和数据表的编码都为utf8,连接时也使用utf8




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值