En utilisant jqgrid pour obtenir des valeurs de liste de manière asynchrone, j'ai rencontré un problème. Les données obtenues par le serveur à partir de la base de données n'avaient pas de caractères chinois tronqués (les journaux étaient saisis sans caractères tronqués), mais lorsqu'elles étaient transmises de manière asynchrone au client. , des caractères tronqués sont apparus. Le côté serveur a été codé (codage UTF-8). Au début, j'ai toujours soupçonné qu'il s'agissait d'un problème avec le client. Par exemple, le codage entre le client et le serveur était incohérent. J'ai également soupçonné qu'il manquait la fonction de l'outil jqGrid : "application/x-www-form-. urlencoded; charset=utf-8", etc. etc.
Le résultat n'était ni l'un ni l'autre, et j'ai lutté pendant plusieurs heures. Plus tard, après avoir été rappelé par Daniel, j'ai découvert que le code d'origine était toujours côté serveur, et c'était un oubli.
@RequestMapping(value = "/searchUserList.form") @ResponseBody public void searchUserList(int page, int rows, HttpServletRequest request, HttpServletResponse response) throws IOException{ System.out.println("idcard="+idCard+"\n page="+page+"\n rows="+rows); List<User> list = userService.findByIDCard(idCard); int totalRecord = list.size(); int totalPage = totalRecord%rows == 0 ? totalRecord/rows : (totalRecord/rows+1); int index = (page-1)*rows; int pageSize = rows; String json = "{\"total\": \""+totalPage+"\", \"page\": \""+page+"\", \"records\": \""+totalRecord+"\", \"rows\": ["; for (int i = index; i < pageSize + index && i<totalRecord; i++) { User u = list.get(i); json += "{\"id\":\"" + u.getUserId() + "\",\"userName\":\""+u.getUserName()+"\",\"idCard\":\""+ u.getIdCard() +"\",\"userTel\":\""+u.getUserTel()+"\",\"userSex\":\""+u.getUserSex()+ "\",\"bankCard\":\""+u.getBankCard()+"\",\"cardStatus\":\""+u.getCardSatus()+"\",\"createTime\":\""+ u.getCreateTime()+"\"}"; if (i != pageSize + index - 1 && i != totalRecord - 1) { json += ","; } } json += "]}"; request.setCharacterEncoding("utf-8"); //这里不设置编码会有乱码 response.setContentType("text/html;charset=utf-8"); response.setHeader("Cache-Control", "no-cache"); PrintWriter out = response.getWriter(); //输出中文,这一句一定要放到response.setContentType("text/html;charset=utf-8"), response.setHeader("Cache-Control", "no-cache")后面,否则中文返回到页面是乱码 out.print(json.toString()); out.flush(); out.close(); }