在java

时间:2015-09-15 05:44:00

标签: java

我需要使用java中的post请求将一些中文和韩文文本发送到服务器。我尝试了以下但它不起作用。我在服务器端收到的是垃圾或' ????'。

public static String HttpPostGeneric(String URLstr, String[] paramName, String[] paramVal)
{
    try{
    String parameters = null;
    if ((paramName != null ) && (paramVal != null))
    {
        parameters = paramName[0] +"="+ paramVal[0];
        URLEncoder.encode(parameters, "US-ASCII").replace("+", "%20");
        for (int i = 1; i < paramName.length; i++) 
        {
            parameters+= "&";
            parameters += URLEncoder.encode(paramName[i], "US-ASCII").replace("+", "%20") + "=" + URLEncoder.encode(paramVal[i], "US-ASCII").replace("+", "%20");
            //parameters += paramName[i] + "=" + paramVal[i];
        }
    }
    //parameters = URLEncoder.encode(parameters, "US-ASCII");
    byte[] postData = parameters.getBytes(StandardCharsets.UTF_8);
    int postDataLength = postData.length;

    URL url = new URL( URLstr );
    HttpURLConnection conn= (HttpURLConnection) url.openConnection();           
    conn.setDoOutput( true );
    conn.setInstanceFollowRedirects( false );
    conn.setRequestMethod( "POST" );

    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
    conn.setRequestProperty("charset", "US_ASCII");
    conn.setRequestProperty("Content-Length", Integer.toString( postDataLength ));
    conn.setUseCaches( false );
    try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {

       wr.write( postData );
       //System.out.print(postData);
    }
    String line;
    BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

    while ((line = reader.readLine()) != null) {
        System.out.println(line);
        return line;
    }

    reader.close(); 
    return line;
    }catch(Exception e)
    {
        return e.getMessage();
    }
}

使用UTF-8编码代替US-ASCII也无济于事。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

使用UTF-8编码而不是US-ASCII不仅仅是在这里。

//parameters = URLEncoder.encode(parameters, "US-ASCII");
byte[] postData = parameters.getBytes(StandardCharsets.UTF_8)

但是所有。

以下可能有效。

URLEncoder.encode(parameters, "UTF-8").replace("+", "%20");
...
parameters += URLEncoder.encode(paramName[i], "UTF-8").replace("+", "%20") + "=" + URLEncoder.encode(paramVal[i], "UTF-8").replace("+", "%20");
...
conn.setRequestProperty("charset", "UTF-8");
...
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),Charsets.UTF-8));

希望有所帮助