一、检查
1、检查一下有没有指定编码格式
2、检查使用输出流的方式(是否已转码)
二、代码
java">public static String sendPost(String url, String paramsStr, String encode) {
OutputStreamWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性(如编码,文件大小,附加参数等)
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("charset", encode);
conn.setRequestProperty("Authorization", "Basic xxxxxx");
conn.setRequestProperty("Accept-Charset", encode);
conn.setRequestProperty("contentType", encode);
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
out = new OutputStreamWriter(conn.getOutputStream(), encode);
out.write(paramsStr);
out.flush();
// 获取响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), encode));
String lines;
StringBuffer sb = new StringBuffer();
while ((lines = in.readLine()) != null) {
lines = new String(lines.getBytes(encode), encode);
lines = URLDecoder.decode(URLDecoder.decode(lines, encode), encode);
sb.append(lines);
}
result = sb.toString();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
三、总结:
-
设置请求编码格式
connection.setRequestProperty("Accept-Charset", "GBK"); connection.setRequestProperty("contentType", "GBK");
-
使用可转码的输出流
PrintWriter out = new PrintWriter(connection.getOutputStream());OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), encode); out.write(paramsStr);
or
DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.wait(paramsStr.getBytes(encode));
一般这种请求,要么就是没有给请求声明编码(客户端:服务器,我支持或我要求返回xxx编码!),要么就是没有在请求前给参数转码(服务器:你个都比,我要UTF的,你客户端是GBK的,你不转码我获取的是乱码阿~)。大多情况都是后者。
四、更多
https://blog.csdn.net/u010001043/article/details/53203576