解码html作为json响应返回 – android
我将跟随编码的html作为json响应,并且不知道如何将其解码为正常的html字符串,顺便说一句,这是一个非常标记的标记。
x3ca hrefx3dx22http:\/\/wordnetweb.princeton.edu\/perl\/webwn?sx3dstrandx22x3ehttp:\/\/wordnetweb.princeton.edu\/perl\/webwn?sx3dstrandx3c\/ax3e
我已经尝试过java.net.UrlDecoder.decode而没有任何问题。
这不是我以前见过的编码,但它看起来像xYZ(其中Y和Z是hex数字[0-9a-f]
)意味着“ascii代码为0xYZ的字符”。 我不确定字母x本身是如何编码的,所以我建议你试着找出来。 但是你可以在正则表达式x([0-9a-f]{2})
上进行查找和替换,获取由两个hex数字表示的整数,然后将其转换为char
(或类似于那)。
然后,它看起来像斜线(和其他字符?看看你是否能找到…)总是在它们前面有一个反斜杠,所以做另一个查找和替换。
您搜索的术语是“UTF8代码单元”。 这些代码单元基本上是反斜杠,后跟“x”和hexascii代码。 我为你写了一个小转换器方法:
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; }
我知道,它有点邋,,但它的工作原理:)
谢谢!!
注意,在操作符中必须为“<=”否则一个字符无法解码。
for(int i=0;i<=input.length()-4;i++) {..}
干杯!
这对我有用
public static String convertUTF8Units_version2(String input) throws UnsupportedEncodingException { return URLDecoder.decode(input.replaceAll("\\\\x", "%"),"UTF-8"); }