前端上传的Json数据如下所示:
{
"name":"百度跳线",//产品名字
"data":[
{"num": 1, "gongxu": "bq"}//gongxu:工序名称,名字已经统一。num:排名顺序
{"num": 2, "gongxu": "rs"}
{"num": 3, "gongxu": "slsjzp"}
//.......
//.......
]
}
在Java后台的Servlet中通过以下代码获取请求体:
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 1. 获取请求体中的内容
BufferedReader br = new BufferedReader(
new InputStreamReader(request.getInputStream(), "utf-8"));
StringBuffer sb = new StringBuffer("");
String temp;
while ((temp = br.readLine()) != null) {
sb.append(temp);
}
br.close();
String params = sb.toString();
System.out.println(params);
最后得出的结果却包含乱码:
name=%E6%9D%A1%E7%BA%BF&data%5B0%5D%5Bnum%5D=1&data%5B0%5D%5Bgongxu%5D=ym&data%5B1%5D%5Bnum%5D=2&data%5B1%5D%5Bgongxu%5D=yj&data%5B2%5D%5Bnum%5D=3&data%5B2%5D%5Bgongxu%5D=yinddj
这里不仅有乱码,而且data字段也有好几个,请问怎么样才能把前端传的数据原封不动的取出来呢?
url 解码,
结果
name=条线&data[0][num]=1&data[0][gongxu]=ym&data[1][num]=2&data[1][gongxu]=yj&data[2][num]=3&data[2][gongxu]=yinddj
http://tool.chinaz.com/tools/urlencode.aspx
这不是乱码吧。
这个是url 使用了urlencode进行的编码, 你需要使用 urldecode解码。
data多个是因为你传的数组,data[0], data[1]...
URL解答:http://blog.csdn.net/u010127245/article/details/51817329
{
"name":"百度跳线",
"data":[
{"num": 1, "gongxu": "bq"},
{"num": 2, "gongxu": "rs"},
{"num": 3, "gongxu": "slsjzp"}
]
}
数据格式正确吗?
那不叫乱码,那是urlencode了,decode一下即可。
这不是乱码,是unicode码,你转一下就可以了。
转换方法推荐下文。
http://blog.csdn.net/z69183787/article/details/25742307
没有乱码你按照自定义接受
web.xml中添加编码过滤器嘛
private Map<String, String> decodeExtras(String extras) {
Map<String, String> results = new HashMap<String, String>();
try {
URI rawExtras = new URI("?" + extras);
List<NameValuePair> extraList = URLEncodedUtils.parse(rawExtras, "UTF-8");
for (NameValuePair item : extraList) {
results.put(item.getName(), item.getValue());
}
} catch (URISyntaxException e) {
Log.w(TAG, "Invalid syntax error while decoding extras data from server.");
}
return results;
}
post请求会自动处理乱码问题,不需要你再进行编码处理.如果加了编码处理代码则会报错