web 项目中浏览器显示乱码?

初学 web 项目开发时,很多人都会遇到中文显示乱码问题,百度一下解决方案看的眼花缭乱,再怎么修改问题依然得不到解决。乱码是如何产生的?当你知道为什么会乱码,理解底层原理之后,你会发现眼前一亮,话不多说,看下图:
在这里插入图片描述

通过上图可知

  • 编码1 和 解码1 使用的编码格式必须相同
  • 编码2 和 解码2 使用的编码格式必须相同

注意:满足上述两条肯定时不会出现乱码的,一般在这四个地方都使用 UTF-8(万国码)

编码设置:(根据上图序号)

  1. form表单: <form id="xx" action="xx" method="xx" accept-charset = "UTF-8">

  2. 服务器的编码格式(request):
    GET和POST方法提交的信息,Tomcat采用了不同的方式来处理编码,对于POST请求,Tomcat会使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使用默认编码。而GET请求则不同,Tomcat对GET请求统一使用Tomcat默认的编码。
    Tomcat 7 及以前的版本 默认编码方式为 IOS-8859-1, 从Tomcat 8开始默认使用 UTF-8

    1.接收get方式
    方式一:(知道使用什么字符集编码)先解码,再编码
    String str = new String(getParameter("message").getBytes("ISO-8859-1"),"UTF-8");

    方式二:修改tomcat配置文件 (不建议)
    <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

    2.接收post方式
    方式一:request.setCharacterEncoding("UTF-8") ;(放在获取参数前才有效)

    方式二:需要在web.xml中配置过滤器

<!-- post乱码过虑器 -->
   <filter>
       <filter-name>CharacterEncodingFilter</filter-name>
       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
       <init-param>
           <param-name>encoding</param-name>
           <param-value>utf-8</param-value>
       </init-param>
   </filter>
   <filter-mapping>
       <filter-name>CharacterEncodingFilter</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>
  1. response :
    方式一:response.setCharacterEncoding("UTF-8");(只能用来设置out输出流中所采用的编码)

    方式二:response.setContentType("text/html;charset=UTF-8");(设置out输出流中字符的编码方式,同时也设置浏览器接收到这些字符后以什么编码方式来解码)

  2. 浏览器显示:
    jsp 或者 html 页面头部添加 <meta content="text/html; charset=utf-8" />"
    在浏览器中打开开发模式,在控制台中 使用 document.charset 可查看当前页面的编码格式
    在这里插入图片描述

总结: 在上述四个地方的编码方式相同,乱码就不会发生了。

eclipse 编辑器中的乱码解决,点击查看

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值