HTTP中文参数尽量用POST方式

POST:
request.setCharacterEncoding("utf-8");
String url = request.getParameter("url");

GET:
request.setCharacterEncoding("utf-8");
String url = request.getParameter("url");
url=new String(url.getBytes("ISO-8859-1"),"UTF-8");


1.在浏览器中发送HTTP请求,输入的中文,浏览器会自动编码: URLEncoder.encode(String,"utf-8");
2.JAVA服务器收到参数后,需要解码: URLDecoder.decode(String,"UTF-8");
这个解码的过程,由tomcat自动完成,所以通常我们使用
request.setCharacterEncoding("utf-8");设置解码方式,tomcat就自动调用
URLDecoder.decode(String,"UTF-8");完成解码.
3.以上方式,当HTTP请求为POST时好时,为GET时乱码。
原因: GET时,TOMCAT默认用ISO-8859-1解码。
这样,我们需要String url = request.getParameter("url");
url=new String(url.getBytes("ISO-8859-1"),"UTF-8");第二次转码。
关于GET方式乱码,可以参考: http://wq-pro.iteye.com/blog/1261444

4.例子:
String data = "http://www.baidu.com/s?tn=baiduhome_pg&ie=utf-8&bs=%E6%AC%A7%E7%B1%B3%E4%BC%BD+%E6%89%8B%E8%A1%A8%E4%BB%B7%E6%A0%BC&f=8&rsv_bp=1&rsv_spt=1&wd=%E6%AC%A7%E7%B1%B3%E4%BC%BD+%E9%81%8B%E5%8B%95%E7%B3%BB%E5%88%97%E6%89%8B%E8%A1%A8%E4%BB%B7%E6%A0%BC&rsv_sug3=1&rsv_sug4";

data = URLEncoder.encode(data);

//将此data作为下一个URL的ref的参数值
String url = "http://localhost:88/trail/trail?action=save&uid=geust1001&siteid=kf_9762&sid=ggg766&url=http%3A//bbs.ntalker.com/thread.php%3Ffid%3D12&ttl=Php%20wind%20%E9%97%AE%E9%A2%98%E5%BF%AB%E9%80%9F%E8%A7%A3%E7%AD%94%20-%20Ntalker%E8%AE%BA%E5%9D%9B%20-%20Powered%20by%20PHPWind&ref=" + data;




总结: URL编码,可以理解为给特殊字符转义;有别与UTF8、GBK转码。

你可能感兴趣的:(编码,乱码)