我在用
App Engine's Maven plugin
要部署简单的servlet:
package test;
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/test")
public class TestServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.setContentType("application/json");
String output = "testing ¡ ¿ ñ testing";
response.getOutputStream().println(output);
}
}
这个servlet输出一些包含特殊字符的文本,比如
¡
,
¿
和
ñ
.
我运行本地开发服务器:
mvn appengine:devserver
我导航到
http://localhost:8080/test
. 我看到这一点:
testing � � � testing
我想这些是
replacement characters
并指出我的编码有问题。
我试过专门设置字符集:
response.setContentType("application/json; charset=UTF-8");
我也尝试过:
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
我已经确认浏览器在响应的标题中使用了此字符编码:
但是我仍然看到替换字符而不是原来的特殊字符。
如果我部署到一个实况应用引擎站点,那么它工作正常,并显示原始的特殊字符。我看到现场有一个
content-encoding
属于
gzip
但这可能是一条红鲱鱼:
我在windows和linux上都试过,在这两个系统上都有相同的行为。
如何设置本地开发服务器的编码,以便看到原始的特殊字符而不是替换字符?