问题描述
我在main方法中执行的时候没有问题,可以正常调用对方的接口,但是通过web容器访问,调用对方的接口,我传入的中文参数过去,他那边就乱码了,求解,代码和main中的一模一样StringBuilderrequestXmlBuilder=newStringBuilder();requestXmlBuilder.append("<?xmlversion="1.0"encoding="UTF-8"?>");requestXmlBuilder.append("<orders>");//订单信息requestXmlBuilder.append("<order>");requestXmlBuilder.append("<order_serial_no>113111119</order_serial_no>");requestXmlBuilder.append("<khddh>113111119</khddh>");//发货方信息requestXmlBuilder.append("<sender>");requestXmlBuilder.append("<name>bb</name>");requestXmlBuilder.append("<company>cc</company>");requestXmlBuilder.append("<city>nn</city>");requestXmlBuilder.append("<address>yy</address>");requestXmlBuilder.append("<postcode>ii</postcode>");requestXmlBuilder.append("<phone>13929449322</phone>");requestXmlBuilder.append("<mobile>13929449322</mobile>");requestXmlBuilder.append("<branch></branch>");requestXmlBuilder.append("</sender>");//收货方信息requestXmlBuilder.append("<receiver>");requestXmlBuilder.append("<name>kk</name>");requestXmlBuilder.append("<city>上海市,上海市,闵行区</city>");requestXmlBuilder.append("<address>上海市,上海市,闵行区七莘路3588号</address>");requestXmlBuilder.append("<postcode>221435</postcode>");requestXmlBuilder.append("<phone>021-8592369</phone>");requestXmlBuilder.append("<mobile>13929449322</mobile>");requestXmlBuilder.append("<branch></branch>");requestXmlBuilder.append("</receiver>");//商品信息requestXmlBuilder.append("<weight>20</weight>");requestXmlBuilder.append("<items>");requestXmlBuilder.append("<item>");requestXmlBuilder.append("<name>kk</name>");requestXmlBuilder.append("<number>2</number>");requestXmlBuilder.append("<remark>lll</remark>");requestXmlBuilder.append("</item>");requestXmlBuilder.append("</items>");requestXmlBuilder.append("<remark>i</remark>");requestXmlBuilder.append("</order>");requestXmlBuilder.append("</orders>");Stringline="";try{StringfirstResponse="";/**制造和发送数据*///打开连接URLurl=newURL(apiUrl);HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();connection.setDoOutput(true);connection.setRequestMethod("POST");connection.setRequestProperty("Charset","UTF-8");OutputStreamWriterout=newOutputStreamWriter(connection.getOutputStream(),"UTF-8");//记录发出报文日志Stringbase64Data=newString(newBase64().encode(requestXmlBuilder.toString().getBytes()));//签名内容Stringvalidation=base64Data+parternId+passWord;validation=DigestUtils.md5Hex(validation);//encode编码parternId=URLEncoder.encode(parternId,"UTF-8");base64Data=URLEncoder.encode(base64Data,"UTF-8");validation=URLEncoder.encode(validation,"UTF-8");//查询StringqueryString="partnerid="+parternId+"&version="+version+"&request="+request+"&xmldata="+base64Data+"&validation="+validation;System.out.println(queryString);out.write(queryString);out.flush();out.close();//获取服务端的反馈InputStreamin=connection.getInputStream();BufferedReaderreader=newBufferedReader(newInputStreamReader(in,"UTF-8"));while((line=reader.readLine())!=null){firstResponse+=line+"n";}in.close();//记录接收报文日志System.out.println("结果:"+firstResponse);Stringmail_no=this.findValueFromResponse(firstResponse,"mail_no");Stringstatus=this.findValueFromResponse(firstResponse,"status");Stringpdf_info=this.findValueFromResponse(firstResponse,"pdf_info");JSONArrayobj=JSONArray.fromObject(pdf_info);JSONObjecto=JSONObject.fromObject(obj.getJSONArray(0).get(0));System.out.println(o.get("package_wdjc"));if("1".equals(status)){//success}//System.out.println(firstResponse);//System.out.println(mail_no);}catch(IOExceptione){//e.printStackTrace();}catch(Exceptione){//e.printStackTrace();}
解决方案
解决方案二:
检查一下编码格式一样不
解决方案三:
是一样的,我在main方法中跑,都可以正常,但是在web环境下,调用就不行了
解决方案四:
统一一下编码,一般乱码的问题都是由编码不一致造成的!
解决方案五:
穿参数的时候设置编码格式,接受参数的时候同样要设置编码格式,另外也要和你跑的环境一致
解决方案六:
英文也乱吗?你http抓包看看数据。
解决方案七:
你本地测试依赖的是本地ide编码,web方式就依赖web服务器编码了。
解决方案八:
转码问题,确定接收方的编码格式和你传输过去信息的编码格式一致
解决方案九:
引用6楼fangmingshijie的回复:
你本地测试依赖的是本地ide编码,web方式就依赖web服务器编码了。
对方也是utf-8呢我的也是utf-8
解决方案十:
让@云中小神仙看看,他肯定知道。
解决方案十一:
检查下编码格式,然后发送报文的地方两次decode,然后接收方两次encode
解决方案十二:
URL传递中文参数,默认格式为ISO-8859-1,一般在接收该参数时,如果不进行编码,得到的会是乱码。接收参数时将参数转换,例如:Stringresult=newString(name.getBytes("ISO-8859-1"),"utf-8");你试试呗!
解决方案十三:
将你的java文件用txt编辑器打开,改为UTF-8编码的文件,然后运行下试试
解决方案十四:
他乱码了,你纠结个毛啊!!!!!!!!!让他拿出你发送的内容不是UTF-8的证据。
解决方案十五:
不要在代码中使用中文,做个资源国际化啊
解决方案:
url参数乱码,改服务器配置URIEncoding=utf-8试试呢
解决方案:
请问楼主的问题找到解决方案了么,能否分享一下?
解决方案:
全统一uft-8就可以Strings2=newString(s1.getBytes(“GBK”),"utf-8");<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>request.setCharacterEncoding("UTF-8");
解决方案:
楼主找到解决办法了吗。遇到了相同的问题
解决方案:
叫他那边给Tomcat的配置文件server,xml<ConnectorconnectionTimeout="20000"port="8083"protocol="HTTP/1.1"redirectPort="8443"URIEncoding="UTF-8"/>
解决方案:
看接口那边是什么编码的。自己后台转一下吧。
解决方案:
如果你用的是get的方式过去的不管是否编码一样都是话乱码的他在接收到数据的时候要自己转码