Servlet中设置setCharacterEncoding和setContentType的区别

ServletOutputStream

前者设置的是发送的数据的编码方式。后者设置的是浏览器解析的编码方式和发送的数据的编码方式。
两种设置方式会相互覆盖:(但是 servletResponse.setContentType(“text/html;charset=GBK”)设置的浏览器解码方式不会消失)
在这里插入图片描述
在这里插入图片描述
当设置CharacterEncoding时
在这里插入图片描述
或者
在这里插入图片描述

在这里插入图片描述
均不会出现乱码。由此可以推出,当只设置CharacterEncoding时,浏览器的解码方式会自动识别。CharacterEncoding只是告诉浏览器我要发送的数据的编码类型。
那么,我即使告诉浏览器我发的数据的编码时ISO-8859-1(默认就是ISO-8859-1)也是可以成功解码。
在这里插入图片描述
在这里插入图片描述
也就是说这个CharacterEncoding实际上对ServletOutputStream不起作用。

当设置了ContentType时服务器数据的编码方式(对ServletOutputStream不起作用)和浏览器的解码都确定了。
因此
在这里插入图片描述

会产生乱码
在这里插入图片描述

在这里插入图片描述
不会产生乱码
在这里插入图片描述

PrintWriter

在这里插入图片描述
上面两种方式设置的服务器端传输的数据编码可以相互覆盖。
PrintWriter传输的数据会自动按照在这里插入图片描述
编码方式进行编码。当不指定ContentType时,浏览器解码方式会按照与服务器端编码相匹配的方式进行解码。当指定ContentType时,按他指定的方式进行解码。
由此可以推断出,此时不能设置CharacterEnco为ISO-8859-1(因为发送前会把数据按照ISO-8859-1的方式进行编码,而中文不能用ISO-8859-1来表示)
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_30033509/article/details/109689931
今日推荐