您的位置:首页 > 其它

Response一些常用的场景和浏览器和服务器间编码问题

2018-03-08 20:26 309 查看

问题一、中文输出到浏览器乱码问题

//设置编码格式 即便在这里设置了编码格式,但是输出到浏览器中仍然会乱码
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("Utf-8");
String str ="中国";
//乱码---?? 这个如果要使用writer需要配合setCharacterEncoding方法一起使用
//response.getWriter().write(str);
//使用这种方式也是乱码--涓浗
OutputStream os = response.getOutputStream();
//os.write(str.getBytes("utf-8"));
//解决办法--程序中使用什么编码处理那么就告诉浏览器用什么编码解读-这种方式没有乱码,记下
//几款主流浏览器默认的编码格式
response.setHeader("Content-type", "text/html;charset=UTF-8");
os.write(str.getBytes("utf-8"));
//打印数字1 如果直接用writer输出会提示下载文件并且是乱码,但是如果用setCharacterEncoding方法后就是不提示下载也没有显示
//response.setCharacterEncoding("UTF-8");
//response.getOutputStream().write(1);
//response.getOutputStream().write(1);
//下面的方法可以正常的输出到浏览器中,同时也可以说明,对于需要在浏览器中显示的数据最好都以字符串的形式传输
response.setHeader("Content-type", "text/html;charset=utf-8");
OutputStream os = response.getOutputStream();
os.write((1+"").getBytes("UTF-8"));
          总结,一般如果使用writer的话,需要配合setCharacterEncoding,并且需要设置浏览器的解析格式setHeader("Content-type","text/html;charset=utf-8");使用OutPutstream进行处理的话必须将输出的东西进行转码后在进行输出,并且设置浏览器的解码格式。

 二、登录成功之后的跳转。

//		通常refresh用于程序登录成功之后的跳转
response.setCharacterEncoding("utf-8");
response.setHeader("refresh", "3;url='https://www.baidu.com'");
response.setHeader("Content-type", "text/html;charset=uft-8");
response.getWriter().write("恭喜你!登陆成功。3秒后跳转到首页,如果没有跳转,请点击<a color='red' href='https://www.baidu.com'>首页</a>");

三、文件下载中的编码问题

  /*
* 1、获取文件的绝对路径
* 2、设置content-disposition响应头控制浏览器以下载的形式打开文件
* 3、获取要下载的文件输入流。
* 4、创建缓冲区
* 5、获取输出流
* 6、输出到浏览器端
*/
// File f = new File("白豆腐.jpg");//这个路径是/home/lxj/白豆腐.jpg 如果要获取某个资源必须知道他的绝对路径
// InputStream is = new FileInputStream(f);

// System.out.println(f.getAbsolutePath());
// 当前服务器的绝对路径--这种方式可以获取相关的资源文件
String path = this.getServletContext().getRealPath("/");
File f = new File(path+"/"+"白豆腐.jpg");
InputStream is = new FileInputStream(f);
response.setHeader("Content-type", "application/x-download;charset=utf-8");
// 这个方式还是不能够正确的显示中文的文件名
// response.setHeader("Content-Disposition", "attachment;filename="+new String("白豆腐33.jpg".getBytes("utf-8")));
// 网上说HTTP传输先默认的按照ISO8859-1编码,浏览器默认解码也是按照这个来的--ok
response.setHeader("Co
4000
ntent-Disposition", "attachment;filename="+new String("白豆腐33.jpg".getBytes("utf-8"),"ISO8859-1"));
// 禁止浏览器缓存
// response.setDateHeader("expries", -1); //缓存时间
// response.setHeader("Cache-Control", "no-cache");
// response.setHeader("Pragma", "no-cache");
// response.setHeader("refresh", "3"); // 设置refresh响应头控制浏览器每隔3秒钟刷新一次
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[1024];
int len ;
while ((len = is.read(buffer))>0) {
os.write(buffer, 0, len);
}        问题:文件路径问题-如果直接new File("xx.jpg"),读取的路径并不是当前应用的路径下的文件,而是当前用户下的某个文件,使用this.getServletContext().getRealPath("/")获取当前应用的绝对路径,然后获取应用下的文件;另外一个就是数据编码问题,因为是下载并不在浏览器显示,所以对传输数据的格式不作要求,唯一需要注意的是文件名字这,需要注意编码问题。浏览器默认的解码格式是ISO8859-1,所以需要现将字符串由UTF-8转换之后再保存这样就不会出现乱码了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: