工作总结之----前后台传输中文或者特殊字符的处理
2018-02-26 15:31
477 查看
1.ajax传参数,使用ajax传递参数时尽量不要把参数拼接到URL后面,要尽量使用data进行参数传输,可以避免中文乱码和特殊字符传输的问题:
例子:
$.ajax({
url: "/zoneLogs/deletePower",
data: {id:id,permiType:permiType},
type: "post",
dataType: "json",
success: function (data) {},
error: function () {}
});
2.js前台进行编码,java后台进行解码:
例子:
js:
//点击详情
function associated2() {
var rows = grid.getSelected();
var objId = rows.OBJID;
var name = rows.NAME;
var url = "/chat/groupPersonList?objId=" + objId+"&name="+encodeURI(encodeURI((name)));
window.location.href = url;
}
java:
/**
* 跳转组员列表页面
* @return
*/
@RequestMapping(value = "/groupPersonList")
public String groupPersonList(HttpServletRequest request) throws UnsupportedEncodingException {
String id = request.getParameter("objId");
String name = URLDecoder.decode(request.getParameter("name"),"UTF-8");
request.setAttribute("id",id);
request.setAttribute("groupName",name);
return "/manage/chat/groupPersonList";
}
3.jsp中EL表达式编码一次,java后台无需解码:
例子:
jsp:
<c:set scope="request" var="fnRe" value="${list[0].fileName}"></c:set>
<p>文件名称:<a href="/zoneLogs/downloadFile?fileName=<%=java.net.URLEncoder.encode(request.getAttribute("fnRe")+"","UTF-8")%>&filePath=${list[0].filePath}">${list[0].fileName}</a></p>
java:
@RequestMapping(value="/downloadFile")
public void downloadFile(HttpServletRequest request, HttpServletResponse response) {
try{
String filePath = request.getParameter("filePath");
String fileName = request.getParameter("fileName");
File f = new File(filePath);
if(!f.exists()){
f.createNewFile();
}
BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len = 0;
response.reset();
response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
OutputStream out=response.getOutputStream();
while ((len = br.read(buf))>0){
out.write(buf,0,len);
}
out.flush();
br.close();
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
对于前台编码两次后台解码一次解释(引用 http://blog.csdn.net/kongqz/article/details/9028111):
因为在jsp中对中文进行了编码的时候用的是UTF-8的编码方式,而在servlet中调用request.getParameter();方法的时候使用服务器指定的编码格式自动解码一次,所以前台编码一次后台解码一次而解码和编码的方式不用所以造成了乱码的出现。
String name=java.net.URLEncoder.encode("测试", "UTF-8");
System.out.println(name);
System.out.println(java.net.URLDecoder.decode(name, "ISO-8859-1"));
编码后的是%E6%B5%8B%E8%AF%95。。
而用ISO-8859-1解码后的是???è?。。
但是如果调用的是
System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));
则结果是打印“测试”。
使用两次编码的过程相当于如下代码:
String name=java.net.URLEncoder.encode("测试", "UTF-8");
System.out.println(name);
name=java.net.URLEncoder.encode(name,"UTF-8");
System.out.println(name);
name=java.net.URLDecoder.decode(name, "UTF-8");
System.out.println(name);
System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));
输出为:
%E6%B5%8B%E8%AF%95
%25E6%25B5%258B%25E8%25AF%2595
%E6%B5%8B%E8%AF%95
测试
第一次编码后将汉字编码为%和字母数字的格式,而第二次编码的时候是对%字母数字进行编码,虽然解码的时候使用的是ISO-8859-1,但是对于%和字母数字而言用ISO-8859-1和UTF-8解码出来的是一样的,此时就回到了汉字被编码过一次的字符串了,当再次进行解码的时候使用UTF-8就回将它转会汉字。
相关文章推荐
- jsp传输特殊字符 URL中文处理
- swift中webview的URL带中文或者特殊字符的处理
- C# winform端 通过HttpWebRequest进行post和get请求,数据格式为json,后台java端接收,其中有关传输特殊字符(\t,\r,',\n,n)等处理
- domino处理ajax传中文或特殊字符问题
- [转载+总结]关于C++中文字符的处理 - absolute - 博客园
- javascript处理url特殊字符总结
- 密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题
- 密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题
- SQL模糊查询时特殊字符的处理方式总结
- Jsp以get方式提交中文及特殊字符,javascript处理乱码问题
- am start的总结,-d参数的总结,以及python中传递内容包含中文及特殊字符&的解决方案
- iOS Http传输过程中对特殊字符的处理
- 工作总结 用, 隔开数据 后台不可以用 List<string> 接收 get请求直接通过浏览器发请求传数组或者list到后台
- 密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题
- (android文件下载)下载链接中包含特殊字符--空格,中文等,导致无法识别处理方案
- python 处理中文网页时,忽略特殊字符,忽略异常
- Spring 处理中文及特殊字符
- js链接中含有+号特殊字符处理,不能传到后台
- java后台与jsp前台特殊字符处理(字符串编码与解码)
- 从后台拿到的属性含有特殊字符乱码的处理