You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

关于pageContext.getOut().write(message)的默认编码及编码设置问询

关于pageContext.getOut().write()编码的问题解答

嘿,我来帮你理清这两个JSP输出编码相关的问题:

1. 如何为pageContext.getOut().write(message)设置编码?

pageContext.getOut()返回的是JspWriter对象,它的编码规则和HTTP响应的编码是绑定的,常用的设置方式有这几种:

  • 通过JSP页面指令直接指定:这是最省心的方式,在JSP页面最顶部添加页面指令,同时指定内容类型和编码:

    <%@ page contentType="text/html; charset=UTF-8" %>
    

    这个指令会同时设置响应的Content-Type头,以及JspWriter的输出编码,既能保证写出的内容用指定编码处理,也会告诉浏览器用该编码解析页面。

  • 通过ServletResponse API动态设置:如果需要在脚本逻辑里灵活指定编码,一定要在获取JspWriter之前先设置响应编码:

    // 必须在调用getOut()之前执行
    pageContext.getResponse().setCharacterEncoding("UTF-8");
    // 之后再输出内容
    pageContext.getOut().write("需要输出的内容");
    

    注意顺序不能搞反,否则编码设置不会生效。

2. pageContext.getOut().write(message)的默认编码是什么?如何设置其他编码?

默认编码情况

默认编码取决于你用的Servlet容器(比如Tomcat、Jetty)的配置,以及JSP页面的默认设置。以Tomcat为例,默认编码是ISO-8859-1(也就是Latin-1)——如果你的JSP页面没显式指定contentType,容器会自动给响应加上text/html; charset=ISO-8859-1的头,此时getOut().write()就会用这个编码处理输出。

设置其他编码的方法

除了上面的两种方式,还有全局统一配置的方案,适合整个Web应用统一编码:

  • 通过web.xml配置编码过滤器:添加一个过滤器统一处理所有响应的编码,这样所有JSP的JspWriter都会自动使用指定编码:
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    要是不用Spring,也可以自己写个简单的Filter,在doFilter方法里调用response.setCharacterEncoding()就行。

如果需要切换到其他编码(比如GBK、UTF-16),只要把上述方法里的UTF-8换成Java支持的标准字符集名称就可以了。


内容的提问来源于stack exchange,提问作者Nico_99

火山引擎 最新活动