gpt4 book ai didi

java - 如何在 SOAP 请求中设置字符编码

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:05:07 26 4
gpt4 key购买 nike

我正在使用 Java 从 Web servlet 调用 SAP SOAP 服务。出于某种原因,每当我在请求字段中使用特殊字符(例如“è”或“à”)时,SAP 都会给我一个错误。 SOAP 服务的 WSDL 是在 UTF-8 中定义的,我已经相应地设置了我的字符编码,如下所示。但是我不确定这是正确的方法。另外,请注意,如果我使用 SOAP UI(具有相同的信封),请求会正常工作,因此它一定是在 Java 端。

URL url = new URL(SOAP_URL);
String authorization = Base64Coder.encodeString(SOAP_USERNAME + ":" + SOAP_PASSWORD);
String envelope = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:urn='urn:sap-com:document:sap:soap:functions:mc-style'><soapenv:Header/><soapenv:Body><urn:ZwsMaintainTkt><item>à</item></urn:ZwsMaintainTkt></soapenv:Body></soapenv:Envelope>";
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setReadTimeout(SOAP_TIMEOUT);
con.setRequestMethod("POST");
con.setRequestProperty("Content-type", "text/xml; charset=utf-8");
con.setRequestProperty("SOAPAction", SOAP_ACTION_ZWSMANTAINTKT);
con.setRequestProperty("Authorization", "Basic " + authorization);
con.setDoOutput(true);
con.setDoInput(true);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(con.getOutputStream());
outputStreamWriter.write(envelope);
outputStreamWriter.close();
InputStream inputStream = con.getInputStream();

最佳答案

  1. 因为 soap-request 是 xml,所以使用 xml-header 来指定请求的编码:

    <?xml version="1.0" encoding="UTF-8"?>

  2. new OutputStreamWriter(con.getOutputStream())使用平台默认编码,这很可能是 ISO8859 的某种风格。使用 new OutputStreamWriter(con.getOutputStream(),"UTF-8")相反

关于java - 如何在 SOAP 请求中设置字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com