Mark一下。
对于“\xE4\xBD\xBF\xE5\xBE\x92\xE8\xA1\x8C\xE8\x80\x85”这种编码格式的中文,shell中直接使用echo -e “\xE4\xBD\xBF\xE5\xBE\x92\xE8\xA1\x8C\xE8\x80\x85″即可得到中文,java中比较麻烦:
import java.io.UnsupportedEncodingException; import java.math.BigInteger; public class Test { public static String str2Hex(String str) throws UnsupportedEncodingException { String hexRaw = String.format("%x", new BigInteger(1, str.getBytes("UTF-8"))); char[] hexRawArr = hexRaw.toCharArray(); StringBuilder hexFmtStr = new StringBuilder(); final String SEP = "\\x"; for (int i = 0; i < hexRawArr.length; i++) { hexFmtStr.append(SEP).append(hexRawArr[i]).append(hexRawArr[++i]); } return hexFmtStr.toString(); } public static String hex2Str(String str) throws UnsupportedEncodingException { String strArr[] = str.split("\\\\"); // 分割拿到形如 xE9 的16进制数据 byte[] byteArr = new byte[strArr.length - 1]; for (int i = 1; i < strArr.length; i++) { Integer hexInt = Integer.decode("0" + strArr[i]); byteArr[i - 1] = hexInt.byteValue(); } return new String(byteArr, "UTF-8"); } public static void main(String[] args) throws UnsupportedEncodingException { System.out.println(str2Hex("中国1a23")); System.out.println(hex2Str(str2Hex("中国1a23"))); System.out.println(hex2Str("\\xE9\\xBB\\x84\\xE8\\x8A\\xB1\\xE6\\xA2\\xA8\\xE5\\xAE\\xB6\\xE5\\x85\\xB7\\xE8\\xBD\\xAC\\xE8\\xAE\\xA9")); } }
补充一个,对于16进制和非16进制混合的情况:
String str = "\\xE6\\x97\\xB6\\xE8\\xA3\\x85__aaaaa\\xE4\\xBD\\xBF\\xE5\\xBE\\x92\\xE8\\xA1\\x8C\\xE8\\x80\\x85"; ByteArrayOutputStream baos = new ByteArrayOutputStream(); for(int i=0; i<str.length();) { if(str.substring(i).startsWith("\\x")) { String s = str.substring(i + 2, i + 4); // System.out.println("--->" + s); baos.write(Integer.parseInt(s, 16)); i = i + 4; } else { // System.out.println(str.substring(i,i+1)); baos.write(str.substring(i,i+1).getBytes("utf-8")); i++; } } byte[] bytes = baos.toByteArray(); String decoded = new String(bytes, "utf-8"); System.out.println(decoded);
输出:
时装__aaaaa使徒行者
参考:https://my.oschina.net/leejun2005/blog/106791
如果觉得本博客对您有帮助,请 赞助作者 。
转载请注明:lxw的大数据田地 » java 中 16 进制 HEX 中文解码