java设置响应编码_Java Web 编码问题二:Servlet响应头的的设置

通过Java Web 编码问题一:jsp的编码,我们知道我们只需要在文件中设置好编码,就基本没有问题了。但是我们们之间使用Servlet的呢?

下面是一个简单的测试Servlet,如果保存UserInfo.saveUser(phoneNum)返回真就输出成功,否则就输出失败:

public class UserRegisterServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

private static final Logger log  = LogManager.getLogger();

/**

* @see HttpServlet#HttpServlet()

*/

public UserRegisterServlet() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request,response);

}

/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("utf-8");

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

String phoneNum = request.getParameter("phoneNum");

log.info(phoneNum);

if(UserInfo.saveUser(phoneNum))

response.getWriter().append("成功");

else

response.getWriter().append("失败");

}

}

首先先看一看这一句,这是设置浏览器响应的编码:

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

我们来看一看客服端浏览器在我的的Servlet中有这一句和没有这一句的其别,下面分别是在Servlet中设置了和没有设置的客服端浏览器响应头的的信息(Firefox debug):

56ed08fcae62002839030cdd311d1ba7.png

9a9aa93cc26bc52604fb276b433c722a.png

那么响应头的Content-Type对浏览器的有什么影响呢?请参见浏览器的解码过程:

从文档中我们知道对浏览器Content-Type是有较高优先级的,如果我们服务器用的是utf-8编码,而我们没有在Content-Type中设置,那么浏览器就会使用特定的算法,或者默认的编码或者header中meta中的信息以及其它方式来进行解码,不同的浏览器有所不同。但是显然这样并不一定是正确的,比如在中国一般本地默认的是GBK的编码方式,来解UTF-8显然会出现乱码。所以建议在Servlet要想浏览器输出中文的时候用

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

来设置浏览器的响应编码,当然charset可以设置为GBK或者GB18030。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值