下面是Servlet中操纵response标的目的页面输出中文时发生乱码的问题,感乐趣的可以看一下。
起首我们来建立一个类名为OutServlet的类,接下来让它担当HttpServelt类,然后重写doGet和doPost的方式。
然后我们在web.xml设置装备摆设OutServlet的相关的信息,好比类的全路径和拜候路径。
接下来我们在OutServlet的doGet方式中操纵response对象挪用getOutputStream()获取一个OutputStream的对象。
然后我们来挪用OutpuStream对象的write()方式输出一个字节数组,这个字节数组由中文字符串转化得来。
操纵OutputStream这种体例输出中文有可能发生乱码。注重是有可能,而不是必然发生乱码。
本家儿如果看浏览器打开文件的编码体例和文件的默认编码体例是否一样,编码一致它就不会发生乱码,纷歧致就会发生乱码。
好比下面的两个成果:利用火狐浏览器拜候发生乱码,利用360浏览器不会乱码。(注重浏览器分歧的版本可能默认的编码体例可能纷歧样,所以你用同样的浏览器,获得的成果纷歧心猿意马一致;再加上浏览器也是可以本身设置编码体例的)
我利用的360平安浏览器,因为它有一个主动检测的功能,所以无论你的文件是GBK仍是UTF-8的编码体例,它城市和你的文件一致,也就不会呈现乱码。(当然这和版本也有关)
为了让它实现无论用什么浏览器都不会乱码,我们来设置浏览器打开这个文件的编码体例;然后设置文件的编码体例。让两者的编码体例一致,它就不会乱码了。
添加了上面的代码之后,再启动办事器,然后用之前乱码的火狐浏览器拜候,可以发现这一次利用火狐也不乱码了。
别的一种标的目的页面输出体例是字符流输出。
resp.getWriter().write("帅得不敷较着");
字符流输出若是不设置编码体例,必然会乱码。
因为getWriter()获得的是一个PrintWriter,它有一个缓冲区,缓冲区的默认编码是ISO-8859-1 这种编码是不撑持中文的,所以必乱码。
我们的话可以经由过程设置缓冲区编码和设置浏览器打开编码,让它们两个编码一致,如许就可以解决中文乱码了。
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-Type", "text/html;charset=UTF-8");
如下图所示当编码一致的时辰,就不会呈现乱码了。
别的
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-Type", "text/html;charset=UTF-8");
有一个简写体例,
resp.setContentType("text/html;charset=UTF-8");//一句等价于上面两句,所以我们用简写体例就可以了。
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!