簡體   English   中英

在HTTPServlet請求中編碼UTF-8

[英]Encoding UTF-8 in HTTPServlet request

這看起來像一個已經解決的問題,但是沒有解決,因為我已經解決了所有有關UTF-8的問題,而所有解決方案都沒有幫助我。

我正在使用JSON簡單庫將http請求發送到包含JSON對象的java servlet。

  1. 我在Tomcat xml文件中添加了UTF-8編碼
  2. 我的HTML頁面支持UTF-8編碼
  3. 我的數據庫和所有表都使用UTF-8編碼
  4. 我使用系統變量將JVM的默認編碼更改為UTF-8(是的,這真是我的絕望)

這是我的調度程序功能:

    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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM