【问题标题】:Servlet JSON response ENCODING issue For "="Servlet JSON 响应编码问题对于“=”
【发布时间】:2014-04-27 03:19:55
【问题描述】:

我有如下简单的 JSON 对象:

{"status":"Success","action":"Redirect","sessionid":6467349943156736,"url":"https://myapplicationing.com/go?id=1000"}

我创建的 JSON 如下:

JSONObject json = new JSONObject();
json.put("status", "Success");
json.put("action", "Redirect");
json.put("sessionid", "6467349943156736");
json.put("url", "https://myapplicationing.com/go?id=1000");

当我写这个 json 作为响应时

resp.setContentType("application/json");        
        resp.setHeader("Cache-Control", "no-cache");
        resp.setCharacterEncoding("utf-8");
        try {
//           json.write(resp.getWriter());//[tried]
//          Gson gson = new GsonBuilder().disableHtmlEscaping().create();
            resp.getWriter().println(json.toString());
//          resp.getWriter().println(gson.toJson(json));//[TRIED]
        } catch (Exception e) {
            e.printStackTrace();
        }

但它仍然给我 JSON 字符串如下:

{"status":"Success","action":"Redirect","sessionid":6467349943156736,"url":"https://myapplicationing.com/go?id\u003d1000"}

这里为什么是ENCODING JSON 字符串。 它正在将“=”替换为“\u003d”。

这个我试过了:

Gson gson = new GsonBuilder().disableHtmlEscaping().create();
resp.getWriter().println(gson.toJson(json));

但不工作。任何解决方案。

【问题讨论】:

  • 你不在乎(除了可读性); "a\u003db""a=b" 是完全相同的 JSON 字符串。
  • 但是这个响应发送到另一个应用程序并且该应用程序只是在浏览器中打开了一个请求,但它在某些浏览器上没有正确打开,有些它正在工作
  • 那么这是远程应用程序中的一个错误,它不能正确解码 JSON 字符串;你应该向他们报告
  • 哦!!!所以没有工作让我来处理这个?
  • 不知道...我用的是 Jackson,不是 Gson...

标签: java json servlets gson response


【解决方案1】:

\u003d= 的 unicode 表示。解析 JSON 时可以转换回=

查看http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringEscapeUtils.html 将Unicode 字符转换为普通字符串。

【讨论】:

  • 是的,但我不想这样发送 JSON。没有这个怎么发送。
  • 当您通过网络发送 JSON 时,它们必须以某种格式编码,而 unicode 是最常用和首选的格式。我还没有看到 unicode 编码造成麻烦的情况。几乎所有处理 JSON 的应用程序都具有处理 unicode 编码的功能。
  • @anirudh 这不是这里的问题;问题是客户端错误。 OP 发送的 JSON 表示是完全有效的,如果客户端正常工作,它会将 JSON 字符串 "a\u003db" 解码为字符串 a=b - 除了一些 OP 的错误客户端不这样做。
  • 好的,那客户端的代码也得改了吧??这里不需要修复吧??
  • @anirudh 呵呵,说起来容易做起来难,一如既往...如果这很简单,Excel 将不再需要 BOM 来读取 UTF-8 编码的 CSV;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多