Java Can';t更改servlet的输出字符编码
我想更改响应对象的字符编码,但在下面的Freemarker模板执行代码执行后,响应对象将更改为提交阶段。如何更改响应对象的字符编码。提前谢谢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
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
Writer
,因此它不会影响输出字符集。关键是创建一个编写器,该编写器(内部)生成具有所需编码的字节流。为此,在获得编写器之前,请执行以下操作:
response.setCharacterEncoding(charEncoding);
((ServletResponse)env).setCharacterEncoding(“UTF-8”)
上面的环境
是freemarker.core.Environment
,因此不能将其类型转换为ServletResponse
。它的类型层次结构是Object>Configurable>Environment
与问题无关,但Freemarker 2.3.20已经过时,2.3.23要好得多。回答得好,非常感谢。请注意,如果它有效,您应该将其标记为答案。