近期因为要使用Jdeveloper 10.1.2开发,当中用到了LovList(也就是弹出列表),弹出列表的标题(中文)总是显示乱码,后来检查才发现,url中的中文经过escape函数编码处理后,不能直接调用显示,而java本身又不具备类似于Javascript的unescape函数来实现解码,本来打算自己写方法来实现,但当中遇到了一点问题,所以就开始上网查找,结果还真发现了一个哥们写的现成的函数,幸甚!代码粘贴如下:
/**
* 对经过escape函数加密的url中的字符串进行解密
* @return 解密后的正常字符串
* @param src
* 参数说明 例如:%u5339%u914D%u8BBE%u5907或者\u5339\u914D\u8BBE\u5907
*/
public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
}
else {
ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
}
else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
}
else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
大家一起共享!
/**
* 对经过escape函数加密的url中的字符串进行解密
* @return 解密后的正常字符串
* @param src
* 参数说明 例如:%u5339%u914D%u8BBE%u5907或者\u5339\u914D\u8BBE\u5907
*/
public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
}
else {
ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
}
else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
}
else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
大家一起共享!