response乱码原因及setCharacterEncoding(“UTF-8“)和setContentType(“application/csv;charset=utf-8“)不生效的原因及解决方

本文主要讲述response乱码原因及response.setCharacterEncoding("UTF-8")和response.setContentType("application/csv;charset=utf-8")不生效的原因及解决方法

一、response乱码
1、首先,response返回有两种,一种是字节流outputstream,一种是字符流printwrite。
申明:这里为了方便起见,所有输出都统一用UTF-8编码。
先说字节流,要输出“中国",给输出流的必须是转换为utf-8的“中国”,还要告诉浏览器,用utf8来解析数据

2、再说字符流,要输出中国,需要设置response.setCharacterEncoding(“UTF-8”);

二、response.setCharacterEncoding(“UTF-8”)和response.setContentType(“application/csv;charset=utf-8“)不生效的原因及解决方法

错误的代码示例

PrintWriter out = null;
            out =response.getWriter();
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(fileName, "UTF-8"));
            response.setContentType("application/csv;charset=utf-8");

原因:

  1. request.getRequestDispatcher方式跳转到SecondServlet后,FirstServlet与SecondServlet共有同一个response。
  2. response.setCharacterEncoding(“UTF-8”)语句执行之前执行了response.getWriter()语句。

基于以上两点原因,即使SecondServlet中response.setCharacterEncoding(“UTF-8”)语句执行之前没有执行了response.getWriter()语句,但是FirstServlet中执行了response.getWriter()语句,同样会使response.setCharacterEncoding(“UTF-8”)不生效。

正确的代码示例:

response.setCharacterEncoding("utf-8");
            response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(fileName, "UTF-8"));
            response.setContentType("application/csv;charset=utf-8");
            PrintWriter out =response.getWriter();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值