我将跟随编码的html作为json响应,并且不知道如何将其解码为正常的html字符串,顺便说一句,这是一个非常标记。
x3ca hrefx3dx22http:\/\/wordnetweb.princeton.edu\/perl\/webwn?sx3dstrandx22x3ehttp:\/\/wordnetweb.princeton.edu\/perl\/webwn?sx3dstrandx3c\/ax3e
我已经尝试了java.net.UrlDecoder.decode而没有任何问题。
答案 0 :(得分:6)
您搜索的术语是“UTF8代码单元”。这些代码单元基本上是反斜杠,后跟“x”和十六进制ascii代码。我为你写了一个小转换器方法:
public static String convertUTF8Units(String input) {
String part = "", output = input;
for(int i=0;i<=input.length()-4;i++) {
part = input.substring(i, i+4);
if(part.startsWith("\\x")) {
byte[] rawByte = new byte[1];
rawByte[0] = (byte) (Integer.parseInt(part.substring(2), 16) & 0x000000FF);
String raw = new String(rawByte);
output = output.replace(part, raw);
}
}
return output;
}
我知道,它有点邋,,但它有效:)
答案 1 :(得分:1)
这不是我之前见过的编码,但它看起来像xYZ(其中Y和Z是十六进制数字[0-9a-f]
)表示“ascii代码为0xYZ的字符”。我不确定字母x本身是如何编码的,所以我建议你试着找出来。但是你可以通过获取由两个十六进制数字表示的整数,然后将其转换为x([0-9a-f]{2})
(或something similar )。
然后,它看起来像斜线(和其他字符?看看你是否能找到......)总是在它们前面有一个反斜杠,所以做另一个查找和替换。
答案 2 :(得分:1)
谢谢!
注意,操作员必须&#34;&lt; =&#34;否则一个字符就无法解码。
for(int i=0;i<=input.length()-4;i++) {..}
干杯!
答案 3 :(得分:-2)
这对我有用
public static String convertUTF8Units_version2(String input) throws UnsupportedEncodingException
{
return URLDecoder.decode(input.replaceAll("\\\\x", "%"),"UTF-8");
}