您的位置:首页 > 其它

解决Servlet中乱码问题

2015-12-21 11:32 197 查看
对于一个刚学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请求只能手动编解码解决乱码问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: