欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

中文乱码问题解决方案

程序员文章站 2022-03-18 19:15:33
...

对于乱码的出现,总是出现一个解决一个,再次出现再次百度,但是对于根本性的问题从来都没有进行过深入的了解和思考,总是浅尝而止,这是我最大的问题,需要在今后的学习中改正。


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");


小结:没有无缘无故的乱码,只是大家的规则不同。