最近我正在开发一个新项目,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":"дÑÑгой"}]
我真的不知道该怎么做。我确定我错过了一些非常小的东西,但我无法发现它。是否有可能以某种方式对此字符串进行双重编码?
答案 0 :(得分: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" ...>
答案 1 :(得分:-2)
尝试使用-Dfile.encoding = UTF-8参数运行java进程。