【问题标题】:response.asXml() always returns encoding error on Play Frameworkresponse.asXml() 在 Play Framework 上总是返回编码错误
【发布时间】:2016-04-10 05:06:25
【问题描述】:

我正在制作 play framweork 应用程序。 我试图从 Web 服务中获取 xml 内容。 http://example.com/api 返回 xml,但其编码为 EUC-JP。 (charset=euc-jp)

我写了以下代码。

WSRequest request = ws.url("http://example.com/api");
WSRequest complexRequest = request.setHeader("Accept", "application/xml")
    .setContentType("application/x-www-form-urlencoded");
Promise<Document> documentPromise = complexRequest.post("key1=value1").map(response -> {
    String name = XPath.selectText("//name", response.asXml());
    System.out.println("name :" + name);
    return response.asXml();
});

但是,response.asXml() 总是返回错误:

[Fatal Error] :xx:xx: Invalid byte 1 of 1-byte UTF-8 sequence.

如何使用 response.asXml 获取数据而不会出错?

【问题讨论】:

标签: java playframework playframework-2.4


【解决方案1】:

最后,我使用 DocumentBuilder 代表 asXml,比如 How to fix Invalid byte 1 of 1-byte UTF-8 sequence

  Promise<Result> resultPromise = request.post("key=" + value).map(response -> {
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    ByteArrayInputStream stream = new ByteArrayInputStream(response.getBody().getBytes("euc-jp"));
    String name = XPath.selectText("//name", builder.parse(stream)));
    System.out.println("name :" + name);

    return ok(main.render());
  });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多