Java Can';t更改servlet的输出字符编码

Java Can';t更改servlet的输出字符编码,java,servlets,character-encoding,freemarker,Java,Servlets,Character Encoding,Freemarker,我想更改响应对象的字符编码,但在下面的Freemarker模板执行代码执行后,响应对象将更改为提交阶段。如何更改响应对象的字符编码。提前谢谢 Writer writer = response.getWriter(); Environment env = template.createProcessingEnvironment(args, writer); env.setOutputEncoding(charEncoding); // this line doesn't seem to have

我想更改响应对象的字符编码,但在下面的Freemarker模板执行代码执行后,响应对象将更改为提交阶段。如何更改响应对象的字符编码。提前谢谢

Writer writer = response.getWriter();
Environment env = template.createProcessingEnvironment(args, writer);
env.setOutputEncoding(charEncoding); // this line doesn't seem to have any effect
env.process();
字符编码总是设置为
ISO-8859-1
,我希望它是
UTF-8

我的环境:

  • googleappengine/Java
  • Servlet API 2.5
  • 爪哇7
  • Freemarker 2.3.20

FreeMarker写入您在上面提供的
Writer
,因此它不会影响输出字符集。关键是创建一个
编写器
,该编写器(内部)生成具有所需编码的字节流。为此,在获得
编写器之前,请执行以下操作:

response.setCharacterEncoding(charEncoding);

((ServletResponse)env).setCharacterEncoding(“UTF-8”)
上面的
环境
freemarker.core.Environment
,因此不能将其类型转换为
ServletResponse
。它的类型层次结构是
Object>Configurable>Environment
与问题无关,但Freemarker 2.3.20已经过时,2.3.23要好得多。回答得好,非常感谢。请注意,如果它有效,您应该将其标记为答案。