这可能看起来像一个已经解决的问题,但事实并非如此,因为我已经完成了所有与UTF-8相关的问题,但没有一个解决方案对我有所帮助。
我正在使用JSON简单库向包含JSON对象的java servlet发送http请求。
这是我的调度员功能:
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中显示数据时都能正常工作。 只有当我从网页插入数据时才会出现问题。
我被困住了,我不知道问题可能在哪里。
有什么建议吗?
答案 0 :(得分:3)
试试这个:
InputStream inputStream = request.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream , StandardCharsets.UTF_8));