总决式:解决乱码.不写中文
创建个Javaweb项目,演示并解决各种乱码
直接next
pom.xml里自动引入了servletapi
目录结构
一般创建好项目先设置下maven与Encoding
建个Servlet测试
启动并访问 无论控制台输出用GBK还是UTF8 都是乱码
此时需要修改Tomcat/conf/logging.properties文件
然后将console输出改成GBK
注意清下缓存 这样控制台输出 和tomcat日志都正常了
关于Get请求中文乱码问题,Tomcat10之后,request请求体当中的字符集默认就是UTF-8,不需要设置字符集,不会出现乱码问题。Tomcat9前(包括9在内),如果前端请求体提交的是中文,后端获取之后出现乱码,怎么解决这个乱码?执行以下代码。
//这段代码要放在获取请求参数前面
关于Get请求中文乱码方案1 request.setCharacterEncoding("UTF-8");
如果Get请求中文还是乱码 修改conf/server.xml配置文件
关于Get请求中文乱码方案2 <Connector 加上URIEncoding="UTF-8" />
注意:从Tomcat8之后,URIEncoding的默认值就是UTF-8,所以GET请求也没有乱码问题了。
关于Post请求中文参数乱码
request.setCharacterEncoding("UTF-8"); 可以解决
响应的中文乱码问题,在Tomcat9之前(包括9),响应中文也是有乱码的,怎么解决这个响应的乱码?
response.setContentType("text/html;charset=UTF-8");
此种方式不一定有效(原因在于,你虽然用utf-8编码,但是浏览器不一定用utf-8解决,)
解决方案1 response.setCharacterEncoding("utf-8");
解决方案2
response.setHeader("Content-type","text/html;charset=utf-8")设置响应头,告诉浏览器也是用utf8
解决方案3 response.setContentType("text/html;charset=utf-8") 同上
需要注意以上三种设置,使用时候需要设置在response获取字节流或者字符流之前,否则无效