java调用第三方接口返回数据中文乱码

编程入门 行业动态 更新时间:2024-10-06 14:31:14

java调用第三方接口返回数据中文<a href=https://www.elefans.com/category/jswz/34/1768993.html style=乱码"/>

java调用第三方接口返回数据中文乱码

背景:使用HttpURLConnection发送POST请求

在测试方法中返回的是正常中文,使用Tomcat跑的程序返回的数据出现中文乱码。

然后在网上查了很多资料,说是因为Tomcat的原因,需要修改配置文件设置字符集。

后来发现改了也没有用,后来思考如果别的都没错,那会不会是因为输入流的时候没有设置字符集的原因呢?

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  SOAPActionconnection.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;}

引用部分出自这里

/*** 获取数据的字符集设置并获取返回数据*/in = conn.getInputStream();InputStreamReader isr = new InputStreamReader(in, "UTF-8");//在这里设置输入流的字符集为UTF-8BufferedReader br = new BufferedReader(isr);StringBuilder sb = new StringBuilder();String temp = null;while(null != (temp = br.readLine())){sb.append(temp);}result = sb.toString();// 获取返回数据//将原先的代码注释掉/*in = conn.getInputStream();resOut = new ByteArrayOutputStream();byte[] bytes = new byte[1024];int len;while ((len = in.read(bytes)) != -1) {resOut.write(bytes, 0, len);}result = resOut.toString();*/

最后成功解决中文乱码的问题,以后使用流的过程中一定要注意输入流与输出流的编码格式!!!!

更多推荐

java调用第三方接口返回数据中文乱码

本文发布于:2024-02-13 10:27:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1758072.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:乱码   第三方   中文   接口   数据

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!