黑马day03 文件下载&中文乱码原理以及url编码

在请求码和响应码中的数据只能是英文状态的即iso8859-1,不可能是中文的,因此,如果文件的名字是中文的需要进行url编码

//这句话是告诉浏览器以下载的方式,被发送的数据要进行url编码,对文件的名字进行url编码-->编码原理:

//将美女转化为utf-8的形式然后转化为16进制,前面加% utf-8一个汉字三个字节下面的只是假设

//美 1100 1001  1110 0110   1000 0001-->%2a %3d %4e

//女 1110 1011  1111 0110   1111 0001-->%2b %3d %6c

//浏览器默认会直接进行url解码

response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode("美女.jpg", "utf-8"));

package cn.itheima.response;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//浏览器默认的是直接打开文件
public class DownLoadServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//这句话是告诉浏览器以下载的方式,被发送的数据要进行url编码,对文件的名字进行url编码-->编码原理:
			//将美女转化为utf-8的形式然后转化为16进制,前面加% utf-8一个汉字三个字节下面的只是假设
			//美 1100 1001  1110 0110   1000 0001-->%2a %3d %4e
			//女 1110 1011  1111 0110   1111 0001-->%2b %3d %6c
		//浏览器默认会直接进行url解码
		response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode("美女.jpg", "utf-8"));
		//需要一个字节输入流
		InputStream in=new FileInputStream(this.getServletContext().getRealPath("美女.jpg"));
		//字节输出流
		OutputStream out=response.getOutputStream();
		byte b[]=new byte[1024];
		int len=0;
		while((len=in.read(b))!=-1){
			out.write(b, 0, len);
		}
		in.close();

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

运行结果:

时间: 2024-10-09 15:58:44

黑马day03 文件下载&中文乱码原理以及url编码的相关文章

010a3 文件下载中文乱码

文件下载中文乱码: 中文名称的文件名下载的时候名称会出现问题 常见的浏览器需要提供文件名称的utf-8编码 对于火狐来说需要提供文件名称的base64编码 方案1:使用工具类 方案2:网上的方式(8成好使) new String(filename.getByte("gbk"),"iso8859-1"); 1 new String(filename.getByte("gbk"),"iso8859-1"); 来自为知笔记(Wiz)

poi导出excel 并处理插入网络图片 范例 处理文件下载中文乱码

package com.inborn.inshop.controller.product; import com.inborn.inshop.common.util.DateUtils;import com.inborn.inshop.model.Goods;import com.inborn.inshop.service.GoodsService;import com.inborn.inshop.vo.ProductExportVo;import org.apache.commons.lang

pager-taglib分页中文乱码原理解析

关于使用pager-taglib分页前端传递中文参数乱码问题的解决方案 1.重现问题 在web项目中有时会用到pager-taglib来作为分页的标签,如上图红色框标识所示,当我们需要把页面参数保持的时候我们会在<pg:param />标签中把参数进行传递. 如果你的页面编码为gb2312那这样写是没有问题的,但是如果你的页面编码是utf-8的话那就会出现乱码问题.我尝试了很多方法,编码过滤器,编码拦截器(struts2),传递 参数的时候进行编码然后后台进行解码,还有WEB(如TomCat等

通过Cookie来记住用户名出现乱码问题(URL编码)

在登录时,提交一个中文名的用户名到服务器并返回到客户端的Cookie中时, 这个过程会后台会报 java.lang.IllegalArgumentException (非法数据异常) -->在给前台发送Cookie之前对数据进行URL编码即可解决. -->URLEncoder.encode(username, "utf-8") 后台解决编码问题后前台就可以接受到Cookie值,这时就会接收到类似:"%E7%AB%A5%E6%97%AD%E5%B9%B3"

黑马day06 jsp之中文乱码&amp;原理&amp;解决方案

我们可以发现我们的工具eclipse或者myeclipse有很强的功能,我们很少见到jsp页面的乱码问题,这是为什么呢?这是因为eclipse很智能,会根据pageEncoding="UTF-8"这个page指令,保存的时候就会提前预知服务器要使用utf-8进行解码,因此保存的时候会根据pageEncoding="UTF-8"智能的为我们写的jsp保存为utf-8格式.但是当我们使用记事本或者其他文本工具进行开发,就会很容易造成乱码,这里我将详细的分析乱码的原因,以

黑马day03 字符流乱码解决方法以及原理分析

1.字符流的乱码 response.getWriter().write("中国");这行代码,首先会把中国写入到缓冲区,然后使用老外喜欢用的iso-8859-1进行编码. 然后浏览器使用本地编码表进行解码.因此会产生乱码. package com.itheima; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import

get方式提交中文乱码(两次编码,一次解码)

1.编码XMLHttpRequest //建立连接 xmlhttp.open("get","${pageContext.request.contextPath}/servlet/searchMenuServlet?name="+encodeURI(encodeURI(name))); //发送请求 xmlhttp.send(null); 2.解码Servlet String name = request.getParameter("name");

mui.ajax中文乱码

估计这是个bug: 1 //mui 的 ajax 中文乱码 2 var url = 'http://api.juheapi.com/japi/toh?key=1f26c107d8864bdfb98202bc314ce0d5&month=11&day=25&v=2.0' 3 mui.ajax(url,{ 4 dataType:'json', 5 type:'post', 6 timeout:5000, 7 success:function(data){ 8 console.log(d

SVN历史版本比较中文乱码

SVN历史版本比较中文乱码 将Workspace的编码改为UTF-8即可