调用接口返回中文乱码_java请求接口返回乱码

调用接口返回中文乱码_java请求接口返回乱码最近调用Webservice接口时,遇到接收乱码的问题最开始用soapUI测试看XML结果是正常的,返回结果大概是这样(只截取了json部分结果){“state”:0,”message”:”流程启动成功”,”seqno”:”202005020009″}后来在JAVA后台使用HttpURLConnection调用(全部代码在后面),发现返回来的中文部分全部乱码,如下{“state…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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;
	}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184395.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • typedef和define具体的具体差别

    typedef和define具体的具体差别

    2021年12月9日
    40
  • 三菱PLC学习方法分享

    三菱PLC学习方法分享  学习plc不是为了研究,而是为了工作需要和应用。下面是我学习PLC的方法,供大家参考!  与PLC自动化相关的知识点很多,比如PLC控制、模拟控制、定位、通信、配置、嵌入式系统、变频器、机械传动、液压系统(不知道是不是自动化)等。知识点太多。以常见的PLC为例,三菱、西门子、欧姆龙、松下、LG、达美、卡恩斯等品牌,加上各种国产品牌和众多知识点。如何学好它们?我理解的学习方法是“巧学”。  以我熟悉的三菱plc为例:  一、基础:一定要打好基础——基础是什么?  1.安装编程软件。  

    2022年10月9日
    0
  • Java8函数式编程

    最近使用lambda表达式,感觉使用起来非常舒服,箭头函数极大增强了代码的表达能力。于是决心花点时间深入地去研究一下java8的函数式。(想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!)一、lambda表达式先po一个最经典的例子——线程publicstaticvoidmain(String[]args){//Java7n…

    2022年4月1日
    31
  • 约瑟夫环问题递归解法的一点理解

    约瑟夫环问题递归解法的一点理解约瑟夫环递归解法代码的一点理解。约瑟夫生者死者游戏约瑟夫游戏的大意:30个游客同乘一条船,因为严重超载,加上风浪大作,危险万分。因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免于难。无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人数起,依次报数,数到第9人,便把他投入

    2022年6月4日
    26
  • 360天擎无密码退出和卸载一样吗_奇安信天擎退出密码

    360天擎无密码退出和卸载一样吗_奇安信天擎退出密码无密码退出删除配置(360Safe\EntClient\conf\EntBase.dat)**注:**删除时提示权限不够无法删除,使用360自带的文件粉碎机将文件粉碎即可无密码退出360天擎(重新打开程序时EntBase.dat会再次生成)修改配置(将EntBase.dat中uipass、qtpass两项值置空)**注:**修改时提示权限不够无法修改,需先关闭【设置】【防护中心】【自我保护】功能卸载只能通过修改配置(将EntBase.dat中uipass、qtpass两项值置空)

    2022年9月25日
    0
  • fastdfs 上传文件(nginx文件上传服务器)

    一、FastDFS介绍FastDFS开源地址:https://github.com/happyfish100参考:分布式文件系统FastDFS设计原理参考:FastDFS分布式文件系统1.简介FastDFS是一个开源的高性能分布式文件系统(DFS)。它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(…

    2022年4月16日
    134

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号