Web应用中文乱码问题

Web应用中文乱码问题

1、字符集

  1. 字符(Character)是各种文字和符号的总称,包括各个国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合。
  2. 任何数据在计算机内部实际上都是以二进制的形式保存的,所以我们看得见的字符本质上都是以二进制的形式保存的。而字符集实际上就是看得见的字符和二进制数之间的一张对应表。

2、编码与解码

在这里插入图片描述

  1. 编码:将字符转换为二进制数
    ‘中’ → E4B8AD → 1110 0100-1011 1000-1010 1101
  2. 解码:将二进制数转换为字符
    1110 0100-1011 1000-1010 1101 → E4B8AD → ‘中’
  3. 乱码:编码与解码使用的字符集不一致就会产生乱码。

3、在Web应用中统一字符集

3.1、请求参数中含有中文

  • 1、请求由浏览器发送给服务器

    • 由浏览器编码
      浏览器使用HTML页面指定的字符集编码,只需要将HTML页面的字符集指定为UTF-8即可
    • 由服务器解码
      默认字符集是IOS-8859-1
    • 解决方案
      • 对于POST请求post请求在Servlet中解码,默认的字符集是ISO-8859-1,不支持中文,所以我们需要修改Servlet的字符集为UTF-8。使用:

        request.setCharacterEncoding("UTF-8");
        

        设置request对象使用UTF-8字符集对请求体中的内容进行解码。但需要注意的是,这个操作一定要在调用 getParameter()方法之前进行。

      • 对于GET请求GET请求是在URL地址栏中传递请求参数的,它会被Tomcat服务器自动解码,而Tomcat服务器默认的字符集也是ISO-8859-1所以我们需要修改Tomcat服务器的字符集为UTF-8。由于请求参数是包含在请求行内的,无法通过request对象进行设置,所以需要在Server.xml文件中修改Connector标签,添加URIEncoding="utf-8"属性。

      • 在这里插入图片描述
        在这里插入图片描述

  • 2、响应由服务器发送给浏览器,服务器响应中含有中文

    • 由服务器编码
      默认使用ISO-8859-1进行编码

    • 由浏览器解码
      默认使用GBK进行解码

    • 解决方案
      方法1:设置响应头

      response.setHeader("Content-Type","text/html;charset=utf-8");
      

      方法2:设置响应的内容类型

      response.setContentType("text/html;charset=utf-8");
      

    其实这两种都是修改响应头中的Content-Type
    通过这种方式可以在响应头中告诉浏览器响应体的编码方式是UTF-8;同时服务器也会采用该字符集进行编码但需要注意的是,两种方法一定要在response.getWriter()之前进行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值