解决Servlet中乱码问题

对于一个刚学J2EE的新手来说,在写一个servlet时经常会遇见乱码。其实解决乱码并不难,理解了就ok了。所以今天总结一下如何解决Servlet中乱码问题。

在servlet中乱码有两种情况:

1.响应乱码(response)

response.getOutputStream().write("中文".getBytes())输出数据,这是一个字节流,是什么字节输出什么字节,而浏览器默认用平台字节码打开服务器发送的数据,如果服务器

端使用了非平台码去输出字符的字节数据就需要明确的指定浏览器编码时所用的码表,以防止乱码问题。response.addHeader("Content-type","text/html;charset=utf-8")

response.getWriter().write(“中文”);输出数据,这是一个字符流,response会将此字符进行转码操作后输出到浏览器,这个过程默认使用ISO8859-1码表,而ISO8859-1中没有中文,于是转码过程中用?代替了中文,导致乱码问题。可以指定response在转码过程中使用的目标码表,防止乱码。response.setCharcterEncoding("utf-8");其实response还提供了setContentType("text/html;charset=utf-8")方法,此方法会设置content-type响应头,通知浏览器打开的码表,同时设置response的转码用码表,从而一行代码解决乱码。

       response.setContentTye("text/html;charset=utf-8");
       response.getOUtputStream().write("".getBytes("utf-8"));
	    
       response.setCharacterEncoding("utf-8");
       response.setContentType("text/html;charset=utf-8");//这一行代码其实内部也实现了 response.setCharacterEncoding("utf-8");意思是写了这句,上句代码可以不写
       response.getWriter().write("");

2.请求乱码(request)

浏览器发送请求参数时,当初打开表单页面时使用的是什么编码就用什么编码发送数据,而服务器如果不指定就要iso8859-1打开,这样就造成乱码。

request.setCharacterEncoding("utf-8");//只对post请求的乱码有用
new String(str.getBytes("iso8859-1"),"utf-8"); //首先把得到的数据转换成iso8859-1的二进制 再把二进制进行utf-8编码     对于get请求只能手动编解码解决乱码问题。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值