您的位置:首页 > Web前端 > JavaScript

jsp页面间跳转 url传递中文参数乱码 以及后续细节处理

2017-09-06 14:42 776 查看
本博客主要讲的是get方式提交中文乱码情况:

背景: 昨天在页面跳转传递中文参数时,出现乱码的情况,捣鼓了很久,在网上查了一些资料,最后结果是因为不起眼的一些小操作,导致浪费了很多时,特此记录一下这个问题的处理.以及一些细节容易出错的地方.

直接上代码:

//页面间跳转 url 传递的参数(get方式)
var params = "marNo=" + marNo + "&marName=" + marName + "&marProv=" + marProv ;
params = encodeURI(encodeURI(params)); //两次URI编码
MsgBox.open("changeOrg","调整商户所属机构", "1000", "350", "changeMarOrgInfo.jsp?"+ params);


两次URI编码原因 : 1.连续两次调用ecodeURI的原因:是因为 Java 中的 request.getParameter(String) 方法会进行一次 URI 的解码过程,调用时内置的解码过程会导致乱码出现。URI编码两次后,request.getParameter(String) 函数得到的是原信息 URI 编码一次的内容。然后再用 下面的3种方式解码,将已经编码的 URI 转换成原文.

下面是中文转码操作 js代码:

方法1:

<%
String marName = new String(request.getParameter("marName").getBytes("iso-8859-1"),"UTF-8");
String marProv = new String(request.getParameter("marProv").getBytes("iso-8859-1"),"UTF-8");
String marCity = new String(request.getParameter("marCity").getBytes("iso-8859-1"
924a
),"UTF-8");
%>
txt_marName.setValue('<%=marName%>');
txt_marProv.setValue('<%=marProv%>');
txt_marCity.setValue('<%=marCity%>');


String str= new String(request.getParameter(“paramname”).getBytes(“iso-8859-1”),”UTF-8”);

原理: 将浏览器默认的iso-8859-1 格式 转为 utf-8中文就能正常显示了.

说明:这种转换方式是针对url传参 以及form表单Method=”GET”提交时起作用.

( request.setCharacterEncoding(“UTF-8”); 是针对form表单Method=”POST”提交时起作用)

原因 : 对于URL传递以及GET方式提交的数据,在接收页面中通过设置request.setCharacterEncoding(“UTF-8”)来解决乱码问题是不行的,在Tomcat5.0以上版本中,默认情况下使用ISO- 8859-1对URL提交的数据和表单中GET方式提交的数据进行重新编解码.

方法2:

java函数解码:

String str=java.net.URLDecoder.decode(request.getParameter(“paramname”) , “UTF-8”);

<%
String marName2 = java.net.URLDecoder.decode(request.getParameter("marName") , "UTF-8");
%>
txt_marName.setValue('<%=marName%>');


方法3:

JavaScript 全局函数decodeURI解码:

<%
String marName2 = request.getParameter("marName");
%>
txt_marName.setValue(decodeURI('<%=marName%>'));


个人推荐此方法3 : 用get方式提交用(encodeURI/decodeURI)来转码中文字符.

对于第一种方法getBytes(“iso-8859-1”)我之前在本地上能成功转换,但是将项目打包到公司测试环境上后中文又变成了乱码.

细节重点:

虽然上面的格式转化,在大部分博客都能随意搜素到,但是介绍得不是很详细,对于我们不太熟练的童鞋有很多地方不注意容易出现错误.如下:

1.首先我们看看下面的符号:

<%%> 这里面可以添加java代码片段

<%=%> 将变量或表达式值输出到页面

<%! %> 这里添加java方法

<%– –%> jsp注释

2 在使用上面的转码方式时,要在<%%>里面写,不然会报错.因为这是java代码.

在获取值时, ‘<%= paramname %>’ 这样来取, 注意 外面加上 引号 ”

由于对jsp中书写java代码不是很熟悉,就导致在转码获取参数时,出了很多奇怪的错误.

在此 记录 一下 .本文并没有详解 中文参数传递的 其他方式方法,着重于记录错误的细节.

有关参数错误乱码的其他解决方式网上其他博客很多,在此不再多说.

个人第一篇博客, 大家一起加油!

参考文章链接:

http://blog.csdn.net/miqi770/article/details/1707568

http://blog.csdn.net/southcamel/article/details/7703317

http://www.cnblogs.com/pengyan5945/p/5218368.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: