地址栏传递中文参数乱码在js里用escape转码


Posted in Javascript onAugust 28, 2013

乱码,乱码,头大,烦,话说设置Tomcat后可以解决,但有的时候不管用了,这时,我们可以考虑转码方式不直接传中文,在js里用escape转码,记得需要用两次,如:

var str=escape("这是中文参数");

str=escape(str);

xxx.do?name=str;

在后台通过一个类的方法再转回来:

Escape.unescape(request.getParameter("name"));

Escape类如下:

package com.laneasy.hy.util; /** 
* js编转码java实现类. 
* 
* @author yangjinde 
*/ 
public class Escape { 
/** The Constant hex. */ 
private final static String[] hex = { "00", "01", "02", "03", "04", "05", 
"06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F", "10", 
"11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", 
"1C", "1D", "1E", "1F", "20", "21", "22", "23", "24", "25", "26", 
"27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F", "30", "31", 
"32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", 
"3D", "3E", "3F", "40", "41", "42", "43", "44", "45", "46", "47", 
"48", "49", "4A", "4B", "4C", "4D", "4E", "4F", "50", "51", "52", 
"53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D", 
"5E", "5F", "60", "61", "62", "63", "64", "65", "66", "67", "68", 
"69", "6A", "6B", "6C", "6D", "6E", "6F", "70", "71", "72", "73", 
"74", "75", "76", "77", "78", "79", "7A", "7B", "7C", "7D", "7E", 
"7F", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", 
"8A", "8B", "8C", "8D", "8E", "8F", "90", "91", "92", "93", "94", 
"95", "96", "97", "98", "99", "9A", "9B", "9C", "9D", "9E", "9F", 
"A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA", 
"AB", "AC", "AD", "AE", "AF", "B0", "B1", "B2", "B3", "B4", "B5", 
"B6", "B7", "B8", "B9", "BA", "BB", "BC", "BD", "BE", "BF", "C0", 
"C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB", 
"CC", "CD", "CE", "CF", "D0", "D1", "D2", "D3", "D4", "D5", "D6", 
"D7", "D8", "D9", "DA", "DB", "DC", "DD", "DE", "DF", "E0", "E1", 
"E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "EA", "EB", "EC", 
"ED", "EE", "EF", "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7", 
"F8", "F9", "FA", "FB", "FC", "FD", "FE", "FF" }; 
/** The Constant val. */ 
private final static byte[] val = { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x01, 
0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F }; 
/** 
* Escape. 
* 
* @param s 
* the s 
* 
* @return the string 
*/ 
/** 
* 编码 
* 
* @param s 
* @return 
*/ 
public static String escape(String s) { 
if (s != null) { 
StringBuffer sbuf = new StringBuffer(); 
int len = s.length(); 
for (int i = 0; i < len; i++) { 
int ch = s.charAt(i); 
if ('A' <= ch && ch <= 'Z') { 
sbuf.append((char) ch); 
} else if ('a' <= ch && ch <= 'z') { 
sbuf.append((char) ch); 
} else if ('0' <= ch && ch <= '9') { 
sbuf.append((char) ch); 
} else if (ch == '-' || ch == '_' || ch == '.' || ch == '!' 
|| ch == '~' || ch == '*' || ch == '\'' || ch == '(' 
|| ch == ')') { 
sbuf.append((char) ch); 
} else if (ch <= 0x007F) { 
sbuf.append('%'); 
sbuf.append(hex[ch]); 
} else { 
sbuf.append('%'); 
sbuf.append('u'); 
sbuf.append(hex[(ch >>> 8)]); 
sbuf.append(hex[(0x00FF & ch)]); 
} 
} 
return sbuf.toString(); 
} 
return null; 
} 
/** 
* Unescape. 
* 
* @param s 
* the s 
* 
* @return the string 
*/ 
/** 
* 解码 说明:本方法保证 不论参数s是否经过escape()编码,均能得到正确的“解码”结果 
* 
* @param s 
* @return 
*/ 
public static String unescape(String s) { 
if (s != null) { 
StringBuffer sbuf = new StringBuffer(); 
int i = 0; 
int len = s.length(); 
while (i < len) { 
int ch = s.charAt(i); 
if ('A' <= ch && ch <= 'Z') { 
sbuf.append((char) ch); 
} else if ('a' <= ch && ch <= 'z') { 
sbuf.append((char) ch); 
} else if ('0' <= ch && ch <= '9') { 
sbuf.append((char) ch); 
} else if (ch == '-' || ch == '_' || ch == '.' || ch == '!' 
|| ch == '~' || ch == '*' || ch == '\'' || ch == '(' 
|| ch == ')') { 
sbuf.append((char) ch); 
} else if (ch == '%') { 
int cint = 0; 
if ('u' != s.charAt(i + 1)) { 
cint = (cint << 4) | val[s.charAt(i + 1)]; 
cint = (cint << 4) | val[s.charAt(i + 2)]; 
i += 2; 
} else { 
cint = (cint << 4) | val[s.charAt(i + 2)]; 
cint = (cint << 4) | val[s.charAt(i + 3)]; 
cint = (cint << 4) | val[s.charAt(i + 4)]; 
cint = (cint << 4) | val[s.charAt(i + 5)]; 
i += 5; 
} 
sbuf.append((char) cint); 
} else { 
sbuf.append((char) ch); 
} 
i++; 
} 
return sbuf.toString(); 
} 
return null; 
} 
}
Javascript 相关文章推荐
javascript 二分法(数组array)
Apr 24 Javascript
Javascript 命名空间模式
Nov 01 Javascript
jquery easyui combox一些实用的小方法
Dec 25 Javascript
如何使用jquery easyui创建标签组件
Nov 18 Javascript
基于javascript数组实现图片轮播
May 02 Javascript
在localStorage中存储对象数组并读取的方法
Sep 24 Javascript
使用Angular缓存父页面数据的方法
Jan 03 Javascript
JavaScript生成指定范围随机数和随机序列的方法
May 05 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
Sep 27 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
Oct 08 Javascript
微信小程序实现留言板功能
Nov 02 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
Nov 24 Javascript
在JavaScript中实现类的方式探讨
Aug 28 #Javascript
实用的Jquery选项卡TAB示例代码
Aug 28 #Javascript
jQuery实现图片信息的浮动显示实例代码
Aug 28 #Javascript
JQuery筛选器全系列介绍
Aug 27 #Javascript
HTML Color Picker(js拾色器效果)
Aug 27 #Javascript
Js中的onblur和onfocus事件应用介绍
Aug 27 #Javascript
javascript:void(0)使用探讨
Aug 27 #Javascript
You might like
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
[01:14]英雄,所敬略同——2018完美盛典宣传视频
2018/12/05 DOTA
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
python中精确输出JSON浮点数的方法
2014/04/18 Python
python和ruby,我选谁?
2017/09/13 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
2015年大学生实习评语
2015/03/25 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python