简体   繁体   English

response.asXml()始终在Play框架上返回编码错误

[英]response.asXml() always returns encoding error on Play Framework

I'm making play framweork application. 我正在玩framweork应用程序。 I tried to get xml content from web services. 我试图从Web服务获取xml内容。 http://example.com/api returns xml, but its encoding is EUC-JP. http://example.com/api返回xml,但是其编码为EUC-JP。 (charset=euc-jp) (字符集= euc-jp)

I wrote the following code. 我写了下面的代码。

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();
});

However, response.asXml() always returns error : 但是,response.asXml()始终返回错误:

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

How can I get data by using response.asXml without any error? 如何使用response.asXml获取数据而没有任何错误?

Finally, I used DocumentBuilder on behalf of asXml, like How to fix Invalid byte 1 of 1-byte UTF-8 sequence 最后,我代表asXml使用DocumentBuilder,例如如何修复1字节UTF-8序列的无效字节1。

  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());
  });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM