大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
最近调用Webservice接口时,遇到接收乱码的问题
最开始用soapUI测试看XML结果是正常的,返回结果大概是这样(只截取了json部分结果)
{"state":0,"message":"流程启动成功","seqno":"202005020009"}
后来在JAVA后台使用HttpURLConnection调用(全部代码在后面),发现返回来的中文部分全部乱码,如下
{"state":0,"message":"娴佺▼鍚姩鎴愬姛","seqno":"202005020009"}
在测试JAVA文件跑JAVA Application中返回的是正常中文,测试JAVA文件里代码与Tomcat上跑的代码是完全一样的,于是打断点查找原因,发现在下面这一步
InputStreamReader isr = new InputStreamReader(is)
isr里的结果就是乱码,上网查InputStreamReader编码格式,找到了这篇文章:InputStreamReader 出现乱码问题如何解决?
大概找到原因,于是试着把编码主动设置为UTF-8,像下面这样,问题解决。若大家解决不了,可尝试其他几种编码方式。
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
贴上整个调用接口的代码,如下,也是一般的使用HttpURLConnection调用Webservice接口的代码
public String callInterface(String URL, String requestMethod, String contentType, String SOAPAction, String soapXml) throws IOException{
String result = "";
//第一步:创建服务地址
URL url = new URL(URL);
//第二步:打开一个通向服务地址的连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//第三步:设置参数
//3.1发送方式设置:POST必须大写
connection.setRequestMethod(requestMethod);
//3.2设置数据格式:content-type SOAPAction
connection.setRequestProperty("content-type", contentType);
connection.setRequestProperty("SOAPAction", SOAPAction);
//3.3设置输入输出,因为默认新创建的connection没有读写权限,
connection.setDoInput(true);
connection.setDoOutput(true);
//第四步:组织SOAP数据,发送请求
System.out.println("requestXml:"+soapXml);
connection.connect();//可能非必须
//将信息以流的方式发送出去
OutputStream os = connection.getOutputStream();
os.write(soapXml.getBytes("UTF-8"));
os.flush();
os.close();
//第五步:接收服务端响应,打印
int responseCode = connection.getResponseCode();
if(200 == responseCode){//表示服务端响应成功
//获取当前连接请求返回的数据流
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String temp = null;
while(null != (temp = br.readLine())){
sb.append(temp);
}
/**
* 打印结果
*/
//response = sb.toString();
result = sb.toString();
System.out.println("返回XML:"+ sb.toString());
is.close();
isr.close();
br.close();
}
os.close();
return result;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/184395.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...