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转换之后再保存这样就不会出现乱码了。
相关文章推荐
- 关于服务器响应,浏览器请求的理解以及javaWeb项目的编码问题
- 关于服务器响应,浏览器请求的理解以及javaWeb项目的编码问题
- JavaEE细节问题03——关于服务器和浏览器的编码解码
- 在一些国外服务器上编码乱码的问题
- 解决客户端浏览器和服务器交互的编码问题详解
- HTTP 浏览器发送给服务器的数据编码问题
- http协议之response案例三:【content-type】--服务器发送给浏览器的数据类型和数据编码格式
- servlet从服务器磁盘文件读出到浏览器显示,中文乱码问题,不要忘记在输入流和输出流都要设置编码格式,否则一个地方没设置不统一就会各种乱码
- vs编码时常用的一些快捷键
- EXCHANGE服务器一些常用的邮件限制方法笔记
- 关于编码遇到的一些问题
- 关于“服务器提交了协议冲突. Section=ResponseStatusLine"问题
- 服务器数据库编码格式问题解决方案
- 服务器与浏览器信息传送编码
- ${pageContext.request.contextPath}及服务器解析和浏览器解析路径问题
- 使用 Request.QueryString 接受参数时,跟编码有关的一些问题
- 笔记-广达服务器时碰到的一些问题的 分类: 服务器等硬件学习 2014-08-25 17:18 479人阅读 评论(0) 收藏
- Liunx服务器下文件的编码问题
- 浏览器为IE9时在服务器注册window.open的问题(已解决)
- 服务器中文乱码问题(request和response)