出现乱码的原因:编码和解码的过程中,使用的字符集不同
字节码--------解码----------->字符
byte char
字符--------编码----------->字节码
常用字符集:utf-8,gbk, ISO-8859-1(不识别中文)
gbk:一个字符占两个的字节。如:"张三"---->[-43,-23,-54,-45]
utf-8:一个字符占三个字节。"张三"---->[-12,-23,-43,-76,-78,-88]
1.数据库中保存中文乱码的问题:
直接向数据库中插入中文记录会出现错误!!!
解决方法:
打开命令窗口:
showvariables like '%character%'; --查看数据库中与字符集相关参数:
需要将MySQL数据库服务器中的客户端部分的字符集改为gbk。
找到MySQL的安装路径:my.ini文件,修改文件中[client]下的字符集为gbk
*重新启动MySQL的服务器---我的电脑---属性---服务和应用程序---服务--重启my-Sql
2.Servlet中乱码问题的解决:
Response向页面响应中文
解决思路:保证响应内容的编码与浏览器显示的编码一致。
|----使用字节流响应中文
|----设置内容编码:“中文”.getBytes("UTF-8")
|----设置浏览器编码:response.setHeader("Content-Type","text/html;charset=UTF-8")
|----使用字符流响应中文
|----设置内容编码:response.setCharacterEncoding("UTF-8")
|----设置浏览器的编码:response.setHeader("Content-Type","text/html;charset=UTF-8")
|----简写方式:response.setContentType("text/html;charset=UTF-8");
Request对象接收表单请求参数的中文乱码处理
|----GET方式----在客户端:使用utf-8提交。在服务器:使用ISO-8859-1对客户端提交的数据进行编码,所以乱码。
因此,在服务器响应客户端数据时,使用ISO-8859-1取出,再用UTF-8编回来
|----new String("中文".getBytes("ISO-8859-1"),"UTF-8")
|----POST方式
方式一:同get
|----new String("中文".getBytes("ISO-8859-1"),"UTF-8")
方式二:
|----request.setCharacterEncoding("UTF-8")
3.Cookie中保存中文:
保存:
Stringmsg = "中文";
//URL进行编码
Stringencode = URLEncoder.encode(msg,"UTF-8");
Cookiecookie = new Cookie("test",encode);
response.addCookie(cookie);
获取:
Cookie[]cookies = request.getCookies();
Cookiecookie = CookieUtils.findCookie(cookies, "test");
//URL解码
Stringdecode = URLDecoder.decode(cookie.getValue(),"UTF-8");
System.out.println(decode);