3

最近我正在做一个新项目,UTF-8这是必须的。我不知道我为什么要面对这个,但这对我来说真的很奇怪。我真的尝试了我所知道的一切,但问题仍然存在。

我正在向我的 servlet 发送一个 JSON 字符串,这是 servlet 部分:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html; charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
    request.setCharacterEncoding("UTF-8");
    if (action.equals("startProcess")) {
        final String data = request.getParameter("mainData");
        URLDecoder.decode(data, "UTF-8");

        System.out.println("DATA \n" + URLDecoder.decode(data, "UTF-8"));
        JSONObject jsonObj = new JSONObject();
        try {


            JSONArray jsonArr = new JSONArray(URLDecoder.decode(data, "UTF-8"));
            jsonObj.put("data", jsonArr);
            JSONArray array = jsonObj.getJSONArray("data");
            System.out.println("insertDtls \n" + jsonObj.toString());

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }
}

System.out.println("insertDtls \n" + jsonObj.toString());回报:

这个结果:DATA [{"department":"1"},{"stampType":"кÑÑÐ³Ð»Ð°Ñ Ð¿ÐµÑаÑÑ"},{"headCompany":"да"},{"stampReason":"1"},{"textToPrint":"asd"},{"comments":"da"},{"other":"дÑÑгой"}]

我真的不知道在这里做什么。我确定我错过了一些非常小的东西,但我无法发现它。是否有可能以某种方式对这个字符串进行双重编码?

4

2 回答 2

3

String data = request.getParameter("mainData");

request.getParameter() 已经解码了 mainData 参数。无需进一步解码:URLDecoder.decode(data, "UTF-8")

如果您仍想获取原始 mainData 参数值,请使用request.getQueryString()然后对其进行解码:URLDecoder.decode(request.getQueryString(), "UTF-8");


在客户端,确保在发送 GET 请求时所有 URL 参数都正确 UTF-8 编码。同样在服务器端确保您的 GET 参数是 UTF-8 解码的。例如,要在 Tomcat 中修复它,您必须在 server.xml 中配置URIEncoding属性:
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" ...>

于 2013-09-03T14:06:37.903 回答
-2

尝试使用 -Dfile.encoding=UTF-8 参数运行您的 java 进程。

于 2013-08-22T12:52:14.037 回答