记录一个问题,servlet向客户端传输json数据时,控制台用system.out.print()输出json数据,一切正常,但客户端获取到的json数据中的中文乱码。
开始的时候
response.setCharacterEncoding("utf-8");//结果一直出不来,不是乱码,就是变成了unicode编码(\ufffd),采用了https://blog.csdn.net/zml_2015/article/details/50971608的转码,依然不行,然后采用了最笨的方法,一个个的试,发现response.setCharacterEncoding("GBK");//这样中文就出来了,而且不用什么unicode转码也行,希望有知道原因的朋友讲解一下!
dopost()的代码如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
//防止post进来的文字乱码
request.setCharacterEncoding("utf-8");
response.setHeader("Content-type", "application/json;charset=utf-8");
response.setContentType("application/json;charset=utf-8");
// response.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("GBK");
switch (request.getServletPath()) {
case "/getUser":
json=(JsonObject) parse.parse(getResponseJson(request));
String name = json.get("username").getAsString();
String pw = json.get("password").getAsString();
User resUser = new Table().getUser(name, pw);
PrintWriter out = new PrintWriter(response.getOutputStream());
out.print(gson.toJson(resUser));
out.flush();
break;
default:
break;
}
}