HTTP中URL的get请求,中文参数乱码

1.不同浏览器对HTTP的URL参数编译不一致;

我遇到的情况是低版本的IE对中文参数进行编码导致乱码;


解决:使用js中的encodeURI函数来对URL地址进行编码(UTF-8)

然后后台解码即可。




JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script type="text/javascript">
    function a_click(obj){
    	obj.href=encodeURI(obj.href);
    	return true;
    }
</script>
<title>Test Page</title>
</head>
<body>
	<h1>根目录:</h1>
	<c:forEach items="${listRoot }" var="file"  varStatus="status">
		<span>硬盘:<a href="/DownLocalFile/sf?url=${file }" οnclick="a_click(this)">${file }</a></span>
	</c:forEach>	 

	<h2>url:${returnUrl }</h2>
	<c:forEach items="${listDirectory }" var="file">
		<span>文件夹:<a href="/DownLocalFile/sf?url=${returnUrl }/${file }" οnclick="a_click(this)">${file }</a></span>
		<br/>
	</c:forEach>

	<c:forEach items="${listFile }" var="file">
		<span>文件:<a href="/DownLocalFile/dlf?url=${returnUrl }/${file }" οnclick="a_click(this)">${file }</a></span><br/>
	</c:forEach>
	
	<br/>
	
</body>
</html>


JAVA:

1.Search File Class

package com.maxtt.servlet;

import java.io.File;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SearchFile extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {		
		String url = req.getParameter("url");
		
		if(null!=url)
			url = URLDecoder.decode(url,"utf-8");
		
		
		//获取根目录
		List<String> listRoot = new ArrayList<String>();
		for(File f : getFile(null) ){
			listRoot.add(f.getPath().replace("\\", ""));
		}
		req.setAttribute("listRoot", listRoot);
		
		//获取url目录
		File[] files = getFile(url);
		
		List<String> listFile = new ArrayList<String>();
		List<String> listDirectory = new ArrayList<String>();
		for(File f : files ){
			if(f.isFile()){
				listFile.add(f.getName());
			}else{
				listDirectory.add(f.getName());
			}
		}
		req.setAttribute("returnUrl", url);
		req.setAttribute("listFile", listFile);
		req.setAttribute("listDirectory", listDirectory);
		//跳转
		req.getRequestDispatcher("/Test.jsp").forward(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
	
	private File[] getFile(String url){
		if(null == url || url.isEmpty()){
			return File.listRoots();
		}
		File file = new File(url);
		return file.exists() ? file.listFiles() : File.listRoots();
	}
	
	
	
}



在文件下载的时候也出现了中文乱,使用UTF-8解码再用ISO8859-1编码。

2.DownLoad File Class

package com.maxtt.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownLoadFile extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String url = req.getParameter("url");
		if(null==url){
			return;
		}

		File file = new File(url);
		if(file.exists()&&file.isFile()){
			//获取响应的输出流
			OutputStream os = resp.getOutputStream();
			byte[] buff = new byte[1000];
			//解决中文乱码
			resp.setHeader("Content-disposition", "attachment;filename="+new String(file.getName().getBytes("UTF-8"),"ISO8859-1"));
			String fileLength = String.valueOf(file.length()); 
			resp.setHeader("Content-Length", fileLength);//下载文件时显示的长度
			FileInputStream inputStream = new FileInputStream(file); //读取文件流
	        while(inputStream.read(buff)!=-1){  
	            os.write(buff);//写出
	        }  
	        inputStream.close(); 
	        os.close();
		}
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
	
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值