作者:掩飾獨殇_389 | 来源:互联网 | 2023-09-24 16:00
基本讲解:
1.UTF-8国际编码,GBK中文编码。GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立;
2、web tomcat:默认是ISO8859-1,不支持中文的
3.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码;
4.getBytes() 是通过平台默认字符集进行编码;
response乱码问题********************
解决方法:
添加:
response.setCharacterEncoding("UTF-8");
解决不了,后来又搜到一条解决方法是:
response.setContentType("text/html;charset=utf-8");或者 response.setHeader("content-type","text/html;charset=UTF-8");告诉浏览器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在拦截器Filter中设置字符编码,则无此方法,因为Filter的doFilter方法的参数类型是ServletResponse)
两句都填上,后来终于解决了这个问题;
其实我们应该思考一下本质:
response.setContentType("text/html;charset=UTF-8"); 目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;
response.setCharacterEncoding("UTF-8");目的是用于response.getWriter()输出的字符流的乱码问题。如果是response.getOutputStream()是不需要此种解决方案的,因为这句话的意思是为了将response对象中的数据以UTF-8解码后的字节流发向浏览器;
Servlet相关的几种乱码******************
1、浏览器调用jsp,html等页面中文显示乱码
此情况需满足两个要求:
(1)文件本身是以utf-8编辑保存的(myEclipse中在properties中鼠标右键选择utf-8)
(2)浏览器用utf-8解析:
(手动)==> 在浏览器中右键选择编码格式为utf-8
(智能)==> 在文件中写入如: 通过标签模拟response头,起到告诉浏览器用utf-8的编码解析
(智能)==> response.setContentType("text/html;charset=UTF-8");起到告诉浏览器用utf-8的编码解析
常用:
或
<%@ pageEncoding="utf-8"%>
request乱码问题*******************
request请求分为post和get,对于不同的请求方式有不同的解决乱码的方案;
==>POST请求:
==>GET请求(URI方式传递参数乱码):
如:显示用户名和密码
解决方法:问题本质是get方式传递的参数内容默认编码方式问ISO8859-1,而且使用request.setCharacterEncoding("utf-8")也无法解决问题。
法一:要解决这个问题,修改tomcat服务器的配置文件。修改tomcat目录下的conf/server.xml文件的第43行:
修改前内容:
maxThreads="150" cOnnectionTimeout="200000"
redirecPort="8443"/>
修改后内容:
maxThreads="150" cOnnectionTimeout="200000"
redirecPort="8443" URIEncoding="utf-8"/>
法二:String usernameString = new String(username.getBytes("ISO-8859-1"),"UTF-8");
JSP相关乱码解决觉案**************************
问题描述:通过jsp,html,或servlet中的表单元素把参数提交给对应的jsp或者servlet时,在接收的jsp或servlet中接收到的参数中文显示乱码。
例如:
提交jsp代码如下:
<%@ page language="java" pageEncoding="utf-8"%>
用户名:
密 码 :
接收参数的jsp代码如下:
<% @ page language="java" pageEncoding="utf-8"%>
接收表单
<% 在这里插入
request.setCharacterEncoding("utf-8");
%>
用户名:<%=request.getParameter("username")%>
密 码:<%=request.getParameter("password")%>
解决方法:在接收post提交的参数前,使用request.setCharacterEncoding("utf-8")设定接收参数的内容格式为utf-8编码。见接收表单中的插入内容即可。当然这种乱码问题最好使用中文过滤器的方法最好。
web引入js文件出现乱码的解决方式:******************
在web开发中我们一般都会不可避免的使用js。我们可以将js代码直接放在页面中即通过内部使用js。但是为了给页面良好的"瘦身"我们一般都会将js代码放在外部,然后通过src引用。这个时候我们就需要注意一个问题:编码问题。如果web页面也js采用不同编码,这个时候就会出现乱码。(内部使用js不需要注意编码问题,因为他们采用的是同一种编码)
解决方式1:
<script type=”text/Javascript” src=”test.js” charset=”utf-8″>
解决方式2:
<script type=”text/Javascript” src=”test.js” charset=”gb2312″>