JS用open方法传中文乱码的解决方案,经测试,有效
首先,在前台调用open打开对话框的位置,对要传值的中文做下转换处理:
var chinese = encodeURI(encodeURI('中文'));
把chinese写进地址里面去。
在接收的时候,可以这样转换:
String chinese = new String(request.getParameter("chinese ").getBytes("ISO-8859-1"),"utf-8");
如此得到的chinese是纯正的中文值。
我们的项目是因为要后台做些处理,然后指定页面转向,因此open对话框的时候,去后台做了下处理。
简单解释下这种做法的原因:
open对话框与打开模态对话框有区别,我们的项目用的编码方式为GBK,我们的项目中打开模态对话框,调用GBK转码,得到的中文值完全正确。但在采用open方式时,采用原有的GBK解码失效。看来以open方式打开对话框与showMedalDialog的差别不单单是能不能用右键,支不支持刷新这么简单。
采用两次encodeURI对中文进行转码,切记!一定要两次!一次注定要失败!两次转码后,此中文信息将以utf-8的方式进行重新编码,这是因为encodeURI的转码是指定UTF-8的,并不是根据服务器环境配置的情况决定。在传递到后台后,以utf-8的方式获取,即可。