解决服务器收到的post数据出现部分乱码问题

原创 2016年10月29日 15:07:42

解决服务器收到的post数据出现部分乱码问题

      今天遇到一个很奇怪的问题,当我使用Java代码进行post提交json数据时,服务器居然出现部分乱码的现象,这些部分乱码不是什么特殊的符号,而是普通的中文,比如:“互联??” 、“网互联网??网” 。我提交json数据时全部是utf-8编码,服务器也是采用utf-8编码,为什么会出现这样的乱码呢?很令人费解!

      于是我就试试通过表单提交会出现这种情况吗,提交后发现服务器打印出的数据是URL编码:%E4%BA%92%E8%81%94%E7%BD%91,既然这样,我把Java代码的post数据也改成了URL编码:URLEncoder.encode(string,"utf-8"),然后服务器端再解码:URLDecoder.decode(str, "utf-8"),然后打印出的数据就是没有一点乱码的数据了。

      post请求内部采用URL编码!

Java发送post请求

    /**
	 * post请求
     * @param url         url地址
     * @param jsonParam     参数
     * @param noNeedResponse    不需要返回结果
     * @return
     */
    public static String httpPost(String url,JSONObject jsonParam, boolean noNeedResponse){
        //post请求返回结果
        DefaultHttpClient httpClient = new DefaultHttpClient();
        String strResult = "";
        if (null != jsonParam) {
            //解决中文乱码问题
            StringEntity entity;
		try {
			//对json数据进行URL编码,不然部分文字会出错。
			entity = new StringEntity(URLEncoder.encode(jsonParam.toString(),"utf-8"), "utf-8");
			entity.setContentEncoding("UTF-8");
			entity.setContentType("application/json");
			url = URLDecoder.decode(url, "UTF-8");
			HttpPost method = new HttpPost(url);
			method.setEntity(entity);
			HttpResponse result = httpClient.execute(method);
			/**请求发送成功,并得到响应**/
			if (result.getStatusLine().getStatusCode() == 200) {
				/**读取服务器返回过来的数据**/
				strResult = EntityUtils.toString(result.getEntity());
				Constant.printLog("--Result--:" + strResult);
			}
		} catch (UnsupportedEncodingException e) {
			Constant.printLog("post请求失败:不支持编码异常");
			e.printStackTrace();
		} catch (ParseException e) {
			Constant.printLog("post请求失败:ParseException");
			e.printStackTrace();
		} catch (IOException e) {
			Constant.printLog("post请求失败:IOException");
			e.printStackTrace();
		}
        }
        return strResult;
    }


服务器接收数据:

public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {

	response.setContentType("text/html;charset=utf-8");
	request.setCharacterEncoding("utf-8");
	String str = FileUtil.readTextFromStream(request.getInputStream(),"utf-8");
	System.out.println("服务器接收到数据:"+URLDecoder.decode(str, "utf-8"));
	PrintWriter out = response.getWriter();

	out.println("数据已收到!");
	out.flush();
	out.close();
}


Get,Post请求中文乱码问题有效解决方法

对于做Java WEB项目同学来说,中文乱码问题是一个经常遇到而又非常头痛的问题,而最容易出现乱码的环节就是在浏览器向服务器发送请求的过程,至于出现乱码的原因不是本文的关注的重点,想了解的朋友可以参考...
  • rchm8519
  • rchm8519
  • 2014年12月14日 22:57
  • 54695

URL编码以及GET和POST提交乱码解决方案

1.  什么是URL编码。 URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发...
  • lfsf802
  • lfsf802
  • 2012年02月04日 09:39
  • 47320

SpringMVC学习(4)--POST请求中文乱码问题

在之前我们没有用基于注解的控制器时,controller是这么写的: public class SaveProductController implements Controller{ priv...

解决post提交乱码过滤器

CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding u...

解决表单Post方式提交的中文乱码问题

在对表单进行提交的时候,例如登陆页面,用户名和密码都正确其他的程序也都没有问题,但是无法进入系统,打断点调试会发现,调用request对象的getParameter(" ")方法从表单中取到对应的值 ...

Java后台发送Post和get请求 (并解决返回值乱码问题)

public class HttpRequest { /** * 向指定URL发送GET方法的请求 * * @param url * ...

HttpClient用HttpPost传输中文字符串乱码

public static String getHttpRequestString(String url,String body) throws IOException { HttpC...
  • anloan
  • anloan
  • 2016年01月06日 20:01
  • 10651

HttpURLConnection以post传数据时中文乱码的一个解决方法

今天在测试自己写的接口时,后台使用HttpURLConnection,以post方式向服务器的接口传数据。但服务器得到的中文是乱码。度娘一早上没找到合适的解决方法。中午一觉醒来随便把 out.writ...

java 接受和发送http,post,get请求,参数中文乱码解决。

一,发送post和get请求 public class HttpUtils { /** * 发送 get请求 */ public static String g...

js post传递中文参数到java后台出现乱码

项目中遇到传递中文参数的问题,这个问题可以利用编码、解码解决。 方案:两次编码,一次解码。 编码: var params = encodeURI(encodeURI("中文")); 把中文编码...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决服务器收到的post数据出现部分乱码问题
举报原因:
原因补充:

(最多只允许输入30个字)