解析类似 %u641c%u72d0 的编码。因为Java中的 char 类型采用的就是Unicode编码, 因此将其中的16进制数先读取成int型,再转成char类型就可以了。
import java.util.ArrayList;
public class UnicodeDecoder {
public static String decode(String codes) {
ArrayList<String> code_list = new ArrayList<String>();
StringBuffer period = new StringBuffer();
codes = codes.substring(1);
codes += '%';
for (int i = 0; i < codes.length(); i++) { // 拆分字符
if (codes.charAt(i) == '%' && period.length() != 0) {
code_list.add(period.toString());
period = new StringBuffer();
} else {
period.append(codes.charAt(i));
}
}
StringBuffer result = new StringBuffer();
for (String code : code_list) { // 逐个转换
result.append((char) Integer.valueOf(code.substring(1), 16).intValue());
}
return result.toString();
}
}
public class UnicodeDecoder {
public static String decode(String codes) {
ArrayList<String> code_list = new ArrayList<String>();
StringBuffer period = new StringBuffer();
codes = codes.substring(1);
codes += '%';
for (int i = 0; i < codes.length(); i++) { // 拆分字符
if (codes.charAt(i) == '%' && period.length() != 0) {
code_list.add(period.toString());
period = new StringBuffer();
} else {
period.append(codes.charAt(i));
}
}
StringBuffer result = new StringBuffer();
for (String code : code_list) { // 逐个转换
result.append((char) Integer.valueOf(code.substring(1), 16).intValue());
}
return result.toString();
}
}
使用时,UnicodeDecoder.decode("%u641c%u72d0") 即可得到编码对应的内容。
转载:http://gaofeihang.blog.163.com/blog/static/84508285201031242737966/