如果我认为,我在开源应用程序中发现了一个错误怎么办?我可以采取哪些步骤,尽可能为程序员提供尽可能多的有用信息?我如何报告最好,避免让程序员烦恼?
另外:正如一些人所说,操作系统程序员会喜欢这份报告:有些项目对错误报告非常挑剔.他们说这是非错误的,或者它是不可再生的,或者它的行为方式是有意或类似的东西.对错误报告的一些批评者可能是合理的,但通常不是.我想"优化"错误报告以获得最佳反馈(最好是修复).
我最近遇到了servlet生成的网站编码问题,如果servlet是在Tomcat下部署的,而不是在Jetty下部署的.我做了一些关于它的研究,并将问题简化为以下servlet:
public class TestServlet extends HttpServlet implements Servlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/plain");
Writer output = response.getWriter();
output.write("öäüÖÄÜß");
output.flush();
output.close();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在Jetty下部署它并将浏览器指向它,它将返回预期的结果.数据以ISO-8859-1的形式返回,如果我查看标题,则Jetty返回:
Content-Type: text/plain; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)
浏览器从此标头中检测编码.如果我在Tomcat中部署相同的servlet,浏览器会显示奇怪的字符.但Tomcat也将数据返回为ISO-8859-1,不同之处在于没有标题可以告诉它.所以浏览器必须猜测编码,这就出错了.
我的问题是,Tomcat的行为是正确还是错误?如果它是正确的,我该如何避免这个问题?当然,我总是可以添加response.setCharacterEncoding("UTF-8");到servlet,但这意味着我设置了一个固定的编码,浏览器可能会或可能不会理解.如果没有浏览器而另一个服务访问servlet,则问题更为相关.那么我应该如何以最灵活的方式处理问题呢?