中文乱码问题解决方案
对于乱码的出现,总是出现一个解决一个,再次出现再次百度,但是对于根本性的问题从来都没有进行过深入的了解和思考,总是浅尝而止,这是我最大的问题,需要在今后的学习中改正。
URL编码:是一种浏览器用来打包表单输入的格式,每对name/value由&分开,每对来自表单的name/value用=分开。
tomcat8以后默认编码格式是utf-8;tomcat7之前的都是iso8859-1,用做Web服务器
浏览器的编码基本上都是utf-8,也有GBK或GB2312,可以参考博客《浏览器编码设置》
eclipse软件Workspace默认是GBK,一般我们都修改成utf-8;jsp也修改为utf-8
所以,我们可以清楚的看到乱码是因为你的开发软件,服务器,浏览器的编码设置是不同的,那么我们需要做的就是把他们全部按照utf-8的编码传递数据和显示。
get请求
get请求是讲参数拼接在url路径上了,url路径是是按照ASCII码编码进行的,没有对应的中文。URL编码结束后就成了ASCII码表范围内的字符了,然后以iso-8859-1的编码方式转化为二进制,随着请求头一起发出去。到达服务器后,服务器先用iso-8859-1解码,这时候就是url编码的内容,所以乱码就显示出来了。
解决方案:
按照逆向国学,先iso-8859-1解码,然后再客户端解码"utf-8"
new String(request.getParameter("name").getBytes("iso-8859-1"),“客户端编码方式”)
或者在tomcat的server.xml中设置URIEncoding="utf-8"
post请求
表单中的参数值对是通过request包发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=UTF-8")中指定的编码进行对表单中的数据进行编码,发给服务器。
解决方案:
在服务器Request.setCharacterEncoding("utf-8")解码
encode编码和decode解码
public static void main(String[] args) {
try {
String name=URLEncoder.encode("你好", "UTF-8");
System.out.println(name);
name=URLDecoder.decode("你好", "UTF-8");
System.out.println(name);
} catch (Exception e) {
}
}
显示效果:
js中的decodeURI()方法相当于java.net.URLDecoder.decode(URIString, "UTF-8");
js中的encodeURI()方法相当于java.net.URLEncoder.encode(URIString, "UTF-8");
小结:没有无缘无故的乱码,只是大家的规则不同。
上一篇: swiper的基本使用
下一篇: js 函数表达式