13、关于项目中出现的中文乱码问题

1.乱码经常出现在什么位置上?

  • 数据"传递"过程中的乱码
  • 数据"展示"过程中的乱码
  • 数据"保存"过程中的乱码

2、数据保存过程中的乱码?

指的是最终保存到数据库表中的时候,数据出现乱码

  • 导致数据保存过程中的乱码包括以下两种情况:
    • 第一种情况:在保存之前,数据本身就是乱码,保存到数据库表中的时候-定是乱码。
    • 第二种情况:保存之前,数据不是乱码,但是由于本身数据库不支持简体中文,保存之后出现乱码

3、数据展示过程中的乱码?

值最终显示到网页上的数据出现中文乱码。核心在于编写编码和解析编码(也就是浏览器编码方式)不一致

  • 经过执行java程序之后,java程序负责向浏览器响应的时候,中文出现乱码, 怎么解决:
    • 设置响应的内容类型,以及对应的字符编码方式:
      response.setContentType("text/html;charset=UTF-8");
  • 没有经过执行java程序,直接访问htm1页面,出现中文乱码,怎么解决:
    • <meta content= "text/html;charset=UTF-8">

4、数据传递过程中的乱码?

将数据从浏览器发送给服务器的时候,服务器接收到的数据是乱码。

浏览器是这样发送数据给服务器的:dname=%E5%B8%82%E5%9C%BA%E9%83%A8
“市场部”对应的ISO-8859-1的编码:%E5%B8%82%E5%9C%BA%E9%83%A8

  1. ISO-8859-1是国际标准码,不支持中文编码,兼容ASCII码,又被称为latin1编码
  2. 不管是哪个国家的文字,在浏览器发送给服务器的时候,都会采用ISO-8859-1的编码方式发送。
  3. 发送给web服务器之后,web服务器不知道这些数据之前是什么类型的文字(中文?日文???),所以web服务器接收到的数据出现乱码。
解决数据传递过程中的乱码:
第一种解决方案:

万能方式,既能够解决POST请求乱码,又能解决GET请求乱码

  1. 先将服务器中接收到的数据采用IS0-8859-1的方式解码,回归原始状态(0101)
  2. 再给定一种支持简体中文的编码方式重新编码组装。【组装的时候编码方式需要和浏览器的编码方式相同】
public class SaveDeptServlet extends HttpServlet {
    @Override
    protected void doPost (HttpServletRequest request, HttpServletResponse response )
    throws ServletException, IOException {
    
        String dname = request.getParameter("dname");
        
        //第一种解决方式:万能解决方案,post和get都可以使用
        
        byte[] bytes = dname.getBytes("IS0-8859-1"); //解码
        
        dname = new String(bytes,"UTF-8"); //编码【这里的编码方式,需要和浏览器的编码方式一致】

        System.out.println(dname);
        
    }
}

第二种解决方案: [只支持POST请求,因为这种方式只对请求体编码]

request.setCharacterEncoding("UTF-8");
以上代码必须在从request中获取任何数据之前设置有效果。

//第二种解决方案:调用request的setCharacterEncoding方法

//告诉Tomcat服务器,请求体中的数据采用UTF-8的方式进行编码
request.setCharbcterEncoding("UTF-8");
String dname = request.getParameter( "dname");
System.out.println(dname);
第三种解决方案:专门解决GET请求的乱码问题,因为这种方式只对请求行编码

修改CATALINA_ HOME/conf/server.xml文件

<Connector port= ”80"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redi rectPort= "8443"
    URIEncoding="UTF-8"/> //加上这句

Connector标签中都可以编写哪些属性呢?

帮助文档: CATALINA _HOME\webapps\docs\config\http.html

  • port端口
  • maxThreads Tomcat服务器最高支持多少个线程并发执行,默认值200
  • URIEncoding设置请求行上的编码方式,解决GET请求乱码
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值