escape采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。
Escape/Unescape加密解码/编码解码,又叫%u编码,从以往经验看编码字符串出现有"u",它是unicode编码,那么Escape编码采用是那一种unicode实现形式呢。其实是UTF-16BE模式。这样一来问题非常简单了。 Escape编码/加密,就是字符对应UTF-16 16进制表示方式前面加%u。Unescape解码/解密,就是去掉"%u"后,将16进制字符还原后,由utf-16转码到自己目标字符。如:字符“中”,UTF-16BE是:“6d93”,因此Escape是“%u6d93”,反之也一样!因为目前%字符,常用作URL编码,所以%u这样编码已经逐渐被废弃了
可以使用 StringEscapeUtils 工具类解码
public static void main(String[] args) {
String ss = "%u5179";
String strUTF16BE = StringEscapeUtils.unescapeJava(ss.replace("%u","\\u"));
System.out.println(strUTF16BE);
}
有一组 字符 String ss = "%u5179",特点是 以%u开头,后接四位16进制数字该字符是4个数字表示一个字符。
或者是%开头,后接 //数字//小写字母//大写字母
转换方式:
public static void main(String[] args) throws UnsupportedEncodingException {
String ss = "%u5179";
String strUTF16BE = StringEscapeUtils.unescapeJava("\\u5179");
System.out.println(strUTF16BE);
}
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
//是否是数字//小写字母//大写字母
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j))
tmp.append(j);
else if (j < 256) {
//可以使用一个字节表示的字符,最大是256
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
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();
}
/**
* @disc 对字符串重新编码
* @param src
* @return
*/
public static String isoToGB(String src) {
String strRet = null;
try {
strRet = new String(src.getBytes("ISO_8859_1"), "GB2312");
} catch (Exception e) {
}
return strRet;
}
/**
* @disc 对字符串重新编码
* @param src
* @return
*/
public static String isoToUTF(String src) {
String strRet = null;
try {
strRet = new String(src.getBytes("ISO_8859_1"), "UTF-8");
} catch (Exception e) {
}
return strRet;
}