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

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

		//设置编码格式 即便在这里设置了编码格式,但是输出到浏览器中仍然会乱码
		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("Content-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转换之后再保存这样就不会出现乱码了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值