gpt4 book ai didi

java - 在 App Engine Devserver Servlet 中查看替换字符

转载 作者:行者123 更新时间:2023-11-30 05:50:08 26 4
gpt4 key购买 nike

我正在使用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");

我已经确认浏览器正在响应的 header 中获取此字符编码:

devserver headers

但我仍然看到替换字符而不是原来的特殊字符。

如果我部署到实时 App Engine 站点,则它可以正常工作并显示原始特殊字符。我看到实时网站的 content-encodinggzip,但这可能是一个转移注意力的事情:

live App Engine headers

我已经在 Windows 和 Linux 上尝试过此操作,并且在两者上都得到了相同的行为。

如何设置本地开发服务器的编码,以便可以看到原始特殊字符而不是替换字符?

最佳答案

结果我需要调用 response.getWriter().println(output) 而不是 response.getOutputStream().println(output)

来自JavaDoc对于HttpServletResponse:

  • getOutputStream() 返回适合在响应中写入二进制数据的 ServletOutputStream。 servlet 容器不对二进制数据进行编码。

  • getWriter() 返回一个可以向客户端发送字 rune 本的 PrintWriter 对象。 PrintWriter 使用 getCharacterEncoding() 返回的字符编码。

关于java - 在 App Engine Devserver Servlet 中查看替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54044916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com