import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.StandardCharsets;
public class HelloWorld {
private static String unescapeGBK(final String s) {
final StringBuilder buf = new StringBuilder();
int i = 0;
int len = s.length();
while (i < len) {
int ch = s.charAt(i);
if (ch == '\\') {
// \xXX\xXX : map to unicode(XXXX)
int c = (char) ((Character.digit(s.charAt(i + 2), 16) << 4)
+ Character.digit(s.charAt(i + 3), 16));
c = c << 8;
c += (char) ((Character.digit(s.charAt(i + 6), 16) << 4)
+ Character.digit(s.charAt(i + 7), 16));
buf.append((char) c);
i += 7;
} else {
buf.append((char) ch);
}
i++;
}
return buf.toString();
}
public static void main(String args[]) throws UnsupportedEncodingException {
// UTF-8
String coderStr = "\\x22\\xE5\\x93\\x88\\xE5\\x93\\x88\\x22";
String str = coderStr.replaceAll("\\\\x", "%");
str = URLDecoder.decode(str, StandardCharsets.UTF_8.toString());
System.out.println(str);
// GBK
coderStr = "\\xb6\\xd4\\xb6\\xc0\\xc1\\xa2\\xd1\\xa7\\xd4\\xba\\xbf\\xc9\\xb3\\xd6\\xd0\\xf8\\xb7\\xa2\\xd5\\xb9\\xce\\xca\\xcc\\xe2";
str = getApacheChineseGBK(coderStr);
System.out.println(str);
}
public static String getApacheChineseGBK(String str) throws UnsupportedEncodingException {
str = str.trim().toLowerCase();
str = unescapeGBK(str);
final ByteBuffer byteBuffer = ByteBuffer.allocate(str.length() * Character.SIZE / Byte.SIZE);
final CharBuffer converter = byteBuffer.asCharBuffer();
converter.append(CharBuffer.wrap(str));
str = new String(byteBuffer.array(), "GBK");
return str;
}
}