在HTTPServlet请求中编码UTF-8

这可能看起来像一个已经解决的问题,但事实并非如此,因为我已经完成了所有与UTF-8相关的问题,但没有一个解决方案对我有所帮助。

我正在使用JSON简单库向包含JSON对象的java servlet发送http请求。

  1. 我在Tomcat xml文件中添加了UTF-8编码
  2. 我的HTML页面支持UTF-8编码
  3. 我的数据库和我的所有表都是UTF-8编码的
  4. 我使用系统变量将JVM的默认编码更改为UTF-8(是的!这是我多么绝望)

这是我的调度员function:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); AjaxParser cr = AjaxParser.ClientRequestFactory(); ClientRequest msg = cr.ParseClientAjax(request); HandleRequest HR = new HandleRequest(); HandleRequestStatus HRS = HR.HandleMessage(msg); AjaxResponseGenerator ARG = new AjaxResponseGenerator(); JSONObject jsonObj = ARG.HandleResponse(HRS); response.setCharacterEncoding("UTF-8"); response.setContentType("application/json"); PrintWriter out = response.getWriter(); System.out.println(jsonObj);// write the json object to console out.println(jsonObj); } 

这就是我如何解析String:

  public ClientRequest ParseClientAjax(HttpServletRequest request) { ClientRequest msg = new ClientRequest(); StringBuffer jb = new StringBuffer(); String line = null; try { BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) jb.append(line); } catch (Exception e) { e.printStackTrace(); } JSONParser parser = new JSONParser(); try { JSONObject obj = (JSONObject) parser.parse(jb.toString()); String opcodeString = (String) obj.get("opcode"); RequestCodeEnum numericEnumCode = (RequestCodeEnum) OpCodesMap .get(opcodeString); msg.setOpCode(numericEnumCode); String entityStr = obj.get("Entity").toString(); Entity entity = makeEntityFromString(numericEnumCode, entityStr); msg.setEntity(entity); } catch (ParseException pe) { System.out.println(pe); } return msg; } 

我尝试通过打印到Eclipse控制台(我也改为UTF-8编码)进行一些调试,我在整个应用程序中发送的文本找出文本编码不正确的地方,我发现文本在右边编码直到执行我的查询之前。 之后我手动检查数据库,文本作为问号插入。

我尝试使用Workbench手动将非英语文本插入到我的数据库中,并且它在数据库本身以及之后在我的HTML中显示数据时都能正常工作。 只有当我从我的网页插入数据时才会出现问题。

我被卡住了,我不知道问题可能在哪里。

有什么建议么?

尝试这个:

 InputStream inputStream = request.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream , StandardCharsets.UTF_8));