我在Java中有这样的字符串:
"\xd0\xb5\xd0\xbd\xd0\xb4\xd0\xbf\xd0\xbe\xd0\xb9\xd0\xbd\xd1\x82"
如何将其转换为人类可读的等效物?
注意:
实际上它是GWT
,这个字符串来自python作为JSON数据的一部分。
JSONParser
将其转换为完全不相关的内容,因此我希望能够在解析之前转换字符串。
我所谓的“人类可读”的预期应该是“ендойнт”(https://mothereff.in/utf-8#%D0%B5%D0%BD%D0%B4%D0%BF%D0%BE%D0%B9%D0%BD%D1%82)
答案 0 :(得分:0)
假设模式是" \ x00"形式的重复字符,其中00可以是[a-fA-F]中的任何数字或字母,你可以用类似的东西转换它这样:
String values = "\\xd0\\xb5\\xd0\\xbd\\xd0\\xb4\\xd0\\xbf\\xd0\\xbe\\xd0\\xb9\\xd0\\xbd\\xd1\\x82";
for (String val: values.split("\\\\x")) {
if (val.length() > 0 ) System.err.print((char) Integer.parseInt(val, 16));
}
请注意,if条件是由第一个分隔符引起的:请参阅How to prevent java.lang.String.split() from creating a leading empty string?
答案 1 :(得分:0)
我不知道这只是我的控制台还是它无法正常工作,但你可以试试这段代码:
import java.io.UnsupportedEncodingException;
import javax.xml.bind.DatatypeConverter;
public class Utf8Decoder {
public static void main(String[] args) {
// TODO Auto-generated method stub
String url = "\\xd0\\xb5\\xd0\\xbd\\xd0\\xb4\\xd0\\xbf\\xd0\\xbe\\xd0\\xb9\\xd0\\xbd\\xd1\\x82";
url= url.replaceAll("\\\\x", ""); //remove the \x on the string...
//it is now hex so let's parse it
//convert to human readable text
String result="";
try {
byte[] bytes= DatatypeConverter.parseHexBinary(url);
result = new String(bytes, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.print("decoded value:"+result);
}
}