JavaWeb中Request的中文乱码问题

中文乱码问题

    当页面提交一个包含中文的请求时,在服务端可能会出现中文乱码问题

乱码产生的原因

    Http协议中规定,数据的传输采用字节编码的形式,无论浏览器提交的数据包含的中文是什么字符编码形式,一旦由浏览器经过Http协议传输,则这些数据均以字节的形式上传给服务器。因为Http协议底层采用的是TCP协议,TCP是一种面向连接的,可靠的,基于字节流的,端对端的通信协议,在请求中,这些字节均以%开头,并以十六进制形式出现,

    那么,乱码是如何产生的呢?

    当用户通过浏览器提交一个包含UTF-8编码格式的两个字的中文请求的时候,浏览器会将这两个中文字符变为六个字节(一般一个UTF-8汉字会占三个字节),即形成六个类似%8E的字节表示形式,并将这六个字上传至tomcat服务器。

    Tomcat服务器在接受这六个字节后,并不知道他们是什么字节编码,而Tomcat默认的编码格式是ISO8859-1,所以会将这六个字按照ISO-8859-1的格式进行编码。编码后在控制台显示,所以控制台会显示乱码。

要注意一点,当前tomcat9已经解决了表单get方式提交的中文乱码问题,但是其他版本并没有解决。

POST中文乱码解决方式

  1. POST通过request body传递参数。

  2. request.setCharacterEncoding("UTF-8"); 这句话解决了POST方式提交的中文乱码问题,这个方法设置了请求正文中的字符编码,所以服务器解析的时候会按照UTF-8的形式进行解码。但是这个方法对get方式没有效果。3

GET中文乱码解决方式

  1. GET方式通过url进行传递参数。

  2. // 下面的方式可以解决post或者get方式的中文乱码问题
    		// 这里接收的name是iso8859-1的字符编码
    		String name = request.getParameter("username");
    		// 将name字符串按照原来字符编码打散
    		byte[] bytes = name.getBytes("ISO8859-1");
    		// 将bytes字节数据按照指定字符编码字符编码进行组装,组装为String
    		name = new String(bytes, "UTF-8");
    //真正的写法:name = new String(name.getBytes("ISO8859-1"), "UTF-8");
  3. 如果用的IDE是myeclipse,找到服务器(tomcat)文件夹,找到conf文件夹,找到server.xml,大概是在71行左右,

  在末尾填上URIEncoding="UTF-8",就可解决。eclipse可以直接在  下进行改动。(但这个方法并不可取)

猜你喜欢

转载自blog.csdn.net/s88893325885/article/details/81748118