当前位置 : 主页 > 编程语言 > c++ >

Servlet收到客户机的提交的数据和回写客户机的数据乱码

来源:互联网 收集:自由互联 发布时间:2021-07-03
gistfile1.txt 服务器默认才iso-8859-1去对response request对象中的数据进行解码编码1、response outputStreamStringstr = "乱码真的好烦人";response.setHeader("content-type", "text/html;charset=utf-8");response.getOutpu
gistfile1.txt
服务器默认才iso-8859-1去对response request对象中的数据进行解码编码
1、response  outputStreamString
str = "乱码真的好烦人";
response.setHeader("content-type", "text/html;charset=utf-8");
response.getOutputStream().write(str.getBytes("utf-8"));
字节流写入到response中,还是字节流,服务器不会再编码。控制中文的编码方式,在告诉浏览器以指定编码集解码


2、response   writerString str = "张兵兵";
response.setCharacterEncoding("utf-8");
response.setHeader("content-type", "text/html;charset=utf-8");
response.getWriter().write(str);
字符写到response中,服务器读取response中数据,设置它为数据编码的编码方式字节流到了浏览器中,在设置浏览器解码字节流的解码方式


3、request乱码返问的页面说明具体的编码方式,浏览器就用该编码方式解码文件,提交的中文数据也用这个编码方式编码)
post请求
request.setCharacterEncoding("utf-8");//只对post请求有效
String name = request.getParameter("name");
//Myeclipse采用的gbkname是gbk编码,如果new String(name.getBytes("utf-8")又会出现乱码,要用gbk解码)
get请求(超链接提交)只能手动:
String name = request.getParameter("name");
String str = new String(name.getBytes("iso-8859-1"),"utf-8");//str是gbk编码保存的看到的字符串,底层还是01010101
服务器要response中的数据写出去,就必须把数据编码成字节数据,默认是用iso-8859-1
比如要写出 ”中”  这个字,  假设它在iso的编码对应值为95  ,浏览器得到的就是95,浏览器又用自己的编码集解码,这是95就不是”中”这个字,就乱码了
网友评论