中文乱码解决方案
>>HTTP协议传中文的特点:
对于传英文或数字,可以原样传
对于传中文,必须对其进行URL编码
提示:URLEncoder编码 和 URLDecoder解码
编码: URLEncoder.encode(String url,String enc);url带中文的url路径,enc指定传递参数的字符编码 UTF-8是W3C的推荐
解码:URLDecoder.decode(String url,String enc);url带中文的url路径,enc指定传递参数的字符编码 UTF-8是W3C的推荐
>>乱码原因:
服务端二端,使用了不同的编码方式,导致中文乱码的出现
>>处理原则:
必须确保服务端二端的编码方式一致或兼容
>>处理方案
1)HTML
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
表示该HTML中的中文按UTF-8编码,同时通知浏览器按UTF-8解码
2)JSP
<%@ page language="java" pageEncoding="UTF-8"%>
表示该JSP中的中文按UTF-8编码,同时通知浏览器按UTF-8解码
3)Servlet/Filter/Listener
doGet()
String username = request.getParametere("username")//按照ISO编码方式解码中文,必定是乱码
byte[] buf = username.getBytes("ISO");//转回原型
username = new String(buf,"UTF-8");//手工再次按UTF-8方式解码
doPost()
reqeust.setCharacterEncoding("UTF-8");//一定要在取参数之前设置
request.getParametere("username")//按照UTF-8去解码中文,默认按ISO编码方式
4)XML
<?xml version="1.0" encoding="UTF-8"?>
表示XML中的中文按照UTF-8去编码
5)浏览器(查看->编码)
相当于一个解码工具,可以按照用户指定的编码方式去解码
如果要看到正确的中文,该解码必须和编码要一致
6)数据库
当数据库提示:Data to long for username field ...,有二种解决方案
>>修改该字段的长度
>>修改my.ini文件,争对客户端编码改为GBK或GB2312,服务端无需修改
再次启动MySQL的服务进程,让他重新加载my.ini文件