我正在尝试解码一个字符串,其中可能包含多个UTF8 (十六进制)编码,如下所示:
"IMPU=H\u’C3A9’tm\u’C3A9’rf\u’C3B6’ldescsizma,AC=IMPU,AC=C-NTDB".
我想将下面的字符串解码为有意义的字符串。
我试过了:
String hex = "H\\u’C3A9’tm\\u’C3A9’rf\\u’C3B6’ldescsizma,DC=IMPU,DC=C-NTDB";
ByteBuffer buff = ByteBuffer.allocate(hex.length()/2);
for (int i = 0; i < hex.length(); i+=2) {
buff.put((byte)Integer.parseInt(hex.substring(i, i+2), 16));
}
buff.rewind();
Charset cs = Charset.forName("UTF-8");
CharBuffer cb = cs.decode(buff);
System.out.println(cb.toString());
不知道如何进一步处理,如果有人有任何想法,请告诉我。
答案 0 :(得分:1)
这是一种方法:
String input = "IMPU=H\\u’C3A9’tm\\u’C3A9’rf\\u’C3B6’ldescsizma,AC=IMPU,AC=C-NTDB";
StringBuffer buf = new StringBuffer();
Matcher m = Pattern.compile("\\\\u’([0-9A-F]{4}(?:[0-9A-F]{2}){0,2})’").matcher(input);
while (m.find()) {
byte[] utf8bytes = javax.xml.bind.DatatypeConverter.parseHexBinary(m.group(1));
m.appendReplacement(buf, new String(utf8bytes, StandardCharsets.UTF_8));
}
String output = m.appendTail(buf).toString();
System.out.println(input);
System.out.println(output);
*使用DatatypeConverter
取自this SO answer。
输出
IMPU=H\u’C3A9’tm\u’C3A9’rf\u’C3B6’ldescsizma,AC=IMPU,AC=C-NTDB
IMPU=Hétmérföldescsizma,AC=IMPU,AC=C-NTDB