【发布时间】:2015-11-20 09:26:26
【问题描述】:
Appengine 在读取请求正文时不尊重req.setCharacterEncoding('UTF-8')。
这就是我阅读请求正文的方式
StringBuilder sb = new StringBuilder();
BufferedReader reader;
req.setCharacterEncoding("UTF-8");
reader = req.getReader();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append('\n');
}
reader.close();
// parse body as JSON
data = new JSONObject(sb.toString());
运行本地测试服务器(mvn appengine:devserver)时正确解析非英文字符的请求,但推送到生产的版本不解析非英文字符(mvn appengine:update);它们被读作?。这种差异是我真正感到困惑的地方。
我也尝试过设置环境变量,比如
<env-variables>
<env-var name="DEFAULT_ENCODING" value="UTF-8" />
</env-variables>
在appengine-web.xml,但这不会改变任何事情。
什么可能导致 prod 服务器无法解析非英文字符?
【问题讨论】:
-
您是否在 req.setCharacterEncoding 调用之前执行了对 req.getParameter...() 的任何调用?众所周知,这会导致 req 正文被完全解析,并且是导致 setCharacterEncoding 非常脆弱的因素之一。