【问题标题】:Decoding html returned as json response - android解码作为 json 响应返回的 html - android
【发布时间】:2010-09-23 05:39:36
【问题描述】:

我正在将编码的 html 作为 json 响应获取,但不知道如何将其解码为普通的 html 字符串,顺便说一下,这是一个 achor 标记。

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

我试过 java.net.UrlDecoder.decode 没有任何运气。

【问题讨论】:

  • 那根本不是 JSON。这些声称是 JSON 的数据来自哪里?
  • 这里是实际的 JSON 响应 [{"type":"text","text":"Resentment - B\x27Day 是美国 R\x26B 歌手 Beyoncé Knowles 的第二张录音室专辑,于 9 月发行2006 年 4 月,哥伦比亚唱片公司与 Music World Music 和 Sony Urban Music 合作。发行恰逢 Knowles\x27 25 岁生日。...","language":"en"},{"type":" url","text":"\x3ca href\x3d\x22http://en.wikipedia.org/wiki/Resentment_(song)\x22\x3ehttp://en.wikipedia.org/wiki/Resentment_(song)\ x3c/a\x3e","语言":"en"}]

标签: java android json


【解决方案1】:

您搜索的术语是“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;
}

我知道,它有点闷,但它有效:)

【讨论】:

  • 感谢 Keenora,但我已经使用正则表达式完成了
  • 我需要它用于 PowerShell,但我无法快速转换它,然后我在这里找到了一种更简单的方法:stackoverflow.com/a/49344121/2964949
【解决方案2】:

这不是我以前见过的编码,但它看起来像 xYZ(其中 Y 和 Z 是十六进制数字 [0-9a-f])表示“ascii 代码为 0xYZ 的字符”。我不确定字母 x 本身将如何编码,因此我建议您尝试找出答案。但是,您可以通过获取两个十六进制数字表示的整数,然后将其转换为char(或something similar),在正则表达式x([0-9a-f]{2}) 上进行查找和替换。

此外,斜线(和其他字符?看看你能不能找到...)前面总是有一个反斜线,所以再做一次查找和替换。

【讨论】:

【解决方案3】:

谢谢!!

注意,for 中的操作符必须是“

for(int i=0;i&lt;=input.length()-4;i++) {..}

干杯!

【讨论】:

    【解决方案4】:

    这对我有用

        public static String convertUTF8Units_version2(String input) throws UnsupportedEncodingException
        {
             return URLDecoder.decode(input.replaceAll("\\\\x", "%"),"UTF-8");
        }
    

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 1970-01-01
      • 2021-01-24
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多