解码html作为json响应返回 - android

时间:2010-09-23 05:39:37

标签: java android json

我将跟随编码的html作为json响应,并且不知道如何将其解码为正常的html字符串,顺便说一句,这是一个非常标记。

x3ca hrefx3dx22http:\/\/wordnetweb.princeton.edu\/perl\/webwn?sx3dstrandx22x3ehttp:\/\/wordnetweb.princeton.edu\/perl\/webwn?sx3dstrandx3c\/ax3e

我已经尝试了java.net.UrlDecoder.decode而没有任何问题。

4 个答案:

答案 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");
    }