/*该端代码是一个实时数据提取的接口,但是提过来的数据中文乱代码*/
/*返回的中文出现乱代码,试过很多种方法不知道问题出在什么地方,请高手帮我看一看.*/
package com.yghanglian.euse;
import java.net.*;
import java.io.*;public class GetPolicys{
public static void main(String args[])throws Exception{
String url="http://202.106.139.5/insurance/insuranceservice";
String param="request=<InsuranceRequest><CompanyCode>YGCB</CompanyCode><Password>123</Password><CompanyName>阳光财产保险公司</CompanyName><BeginTime>20060901092401</BeginTime><EndTime>20061022092403</EndTime></InsuranceRequest>";
String rus=sendGet(url,param);
byte []ss =rus.getBytes("ISO-8859-1");
System.out.println(new String(ss,"gb2312"));
}

public static String sendGet(String url,String param){
   String result = "";
   try{
    String urlName = url + "?"+param;
            URL U = new URL(urlName);
    URLConnection connection = U.openConnection();
    connection.connect();
   
    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String line;
    while ((line = in.readLine())!= null){
                 result += line;
    }
    in.close();  
   
       }catch(Exception e){
       System.out.println("没有结果!"+e);
   }
   return result;
    }
 
  public static String sendPost(String url,String param){
   StringBuffer result= new StringBuffer();
   String ssstr="";
   try{
       URL httpurl = new URL(url);
   HttpURLConnection httpConn = (HttpURLConnection)httpurl.openConnection();       
   httpConn.setDoOutput(true);
   httpConn.setDoInput(true);
   PrintWriter out = new PrintWriter(httpConn.getOutputStream());
   out.print(param);
   out.flush();
   out.close();
   BufferedReader in = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
   String line;
   while (true)
   {
      line = in.readLine();
      if(line==null){
      break;
      }
      result.append(line) ; 
   }
       in.close();
       byte []ss =result.toString().getBytes("ISO-8859-1");
       ssstr=new String(ss,"gb2312");
   }catch(Exception e){
    System.out.println("没有结果!"+e);
   }
    return ssstr;
    }
}
/*返回的中文出现乱代码,试过很多种方法不知道问题出在什么地方,请高手帮我看一看.*/

解决方案 »

  1.   

    编码的格式不一样。
    byte []ss =result.toString().getBytes("ISO-8859-1");改成gb2312;
      

  2.   

    你的代码至少有三处错误:
    1、在给param赋值的时候没有进行url编码。
       这个问题到是不大主要影响对方取值。
    2、使用InputStreamReader读取返回结果,它默认使用的本机编码来对返回结果编码。
       如果返回结果的编码和你的本机默认字符编码一个不会有问题,如果不一致就回出现乱码。
    3、乱调用getBytes("ISO-8859-1")。
       一般人们把它使用在解决乱码问题的情况是这样的,当一个以某种编码的字符串假设gbk,在转化为字符串时使用了错误的编码方式假设utf-8时就出现了乱码,这时人们调用getBytes("utf-8")时就可以的到原来正确的gbk编码的字节数组,这时在显示的使用gbk将其转化为字符串就不会出问题了。也就是说你必须知道原字节流的编码和使用的错误的编码才能正确解决乱码。你的问题的解决方法
    首先确定返回结果的编码,然后调用InputStreamReader的带字符编码的构造函数就行了。