乱码"/>
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调用第三方接口返回数据中文乱码
发布评论