这可能看起来像是一个已经解决的问题,但事实并非如此,因为我已经解决了所有涉及 UTF-8 的问题,但没有一个解决方案对我有帮助。
我使用 JSON 简单库向包含 JSON 对象的 java servlet 发送 http 请求。
- 我在Tomcat xml文件中添加了UTF-8编码
- 我的 HTML 页面支持 UTF-8 编码
- 我的数据库和所有表都是 UTF-8 编码的
- 我使用系统变量将 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);
}
这就是我解析字符串的方法:
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));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)