https OutputStream 传递中文乱码

在main方法中测试正常,但web调用这请求方法就会传值异常,中文全变成了问号


请求方法如下:

/**
* 向指定 URL 发送POST方法的请求

* @param url
*            发送请求的 URL
* @param param
*            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static InputStream sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
HttpsURLConnection httpUrlConnection = (HttpsURLConnection) conn;
httpUrlConnection.setHostnameVerifier(new MyHostnameVerifier());
// 设置通用的请求属性
httpUrlConnection.setRequestProperty("accept", "*/*");
httpUrlConnection.setRequestProperty("connection", "Keep-Alive");
httpUrlConnection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
httpUrlConnection.setRequestProperty("Content-Type", "application/xml");
// 发送POST请求必须设置如下两行
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setDoInput(true);
// 获取URLConnection对象对应的输出流
OutputStream outStrm = httpUrlConnection.getOutputStream();
       if (param!=null && !"".equals(param)){
        outStrm.write(param.getBytes("utf-8"));
       }
       outStrm.flush();
       outStrm.close();
// 定义BufferedReader输入流来读取URL的响应
InputStream inStrm =httpUrlConnection.getInputStream();

return inStrm;
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输出流、输入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return null;
}



不考虑URL转码的情况下,原因出在了tomcat 编码没有改为UTF-8

修改后中文即可正常

如果是安装版或解压版Tomcat,

进入conf文件夹,右键编辑server.xml

<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" />

添加URIEncoding="UTF-8" 即可

如果是eclipse  中的tomcat

如下图所示操作:







添加后保存重启eclipse即可


猜你喜欢

转载自blog.csdn.net/u012934723/article/details/77878131