关于jsp中设置编码格式的问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于jsp中设置编码格式的问题?相关的知识,希望对你有一定的参考价值。

这三种设置编码格式有什么区别?
1、<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
2、response.setContentType("text/html;charset=gbk");

3、request.setCharacterEncoding("gbk");
讲的越详细,越具体,我会考虑加分的。
由于回答人数较多,每个人的回答都很优秀,很难判断那个最好,我已经加了分,下面就交给别人去投票决定吧!谢谢各位的回答!!!

第一个是JSP页面自动生成时默认当前页面的编码格式。
第二个是通过请求后得到的编码后再通过响应时以这个格式输出。
第三个是请求页面是以这个编码格式显示,通常在servlet里面用这种格式设置编码。
参考技术A pageEncoding="gbk"是对整个jsp页面进行编码

response.setContentType("text/html;charset=gbk");
是对响应的页面设置一个头信息,其实就是对响应的那个页面进行编码格式设置

request.setCharacterEncoding("gbk");
是设置请求的时候服务器采用哪种格式对用户提交的信息进行编码!
参考技术B 1.声明本页面的编码格式为GBK,可以认为是支持中文页面;
2.指定所有从其他页面传过来的参数都以中文(GBK)编码;
3.指定某一个传过来的参数编码为中文(GBK);
参考技术C 1.设定当前文件的编码格式为gbk,是文件类型,与页面的字符集无关。
2.设置输出的时候,页面的内容类型为html,页面的字符集为gbk
3.设定对传输过来的信息用gbk编码。
参考技术D 1,是在jsp页面里自动生成的,也可手写,<% @Page %>,这个是指令,就是对整个页面进行设置的
2和3的区别:Request(提交),Response(响应)
2,这个一般写在Selvet里,这句话意思是:设定输出内容为html,字符集为中文
3,也是写在Selvet里,这句话意思是:将内容转换成中文

参考资料:开发基于JSP/Servlet?JavaBean的网上交易系统

如何在Tomcat中设置请求编码?

【中文标题】如何在Tomcat中设置请求编码?【英文标题】:How to set request encoding in Tomcat? 【发布时间】:2011-10-16 03:26:03 【问题描述】:

我的 Java webapp 有问题。

这是 index.jsp 中的代码:

<%@page contentType="text/html" pageEncoding="UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<% request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>

        <form action="index.jsp" method="get">
            <input type="text" name="q"/>
        </form>

        Res: <%= request.getParameter("q") %>
    </body>
</html>

当我对请求进行wireshark 时,我的浏览器会发送此标头:

GET /kjd/index.jsp?q=%C3%A9 HTTP/1.1\r\n
...
Accept-Charset: UTF-8,*\r\n

Tomcat 服务器返回给我这个:

Content-Type: text/html;charset=UTF-8\r\n

但如果我在表单中发送“é”(UTF-8 中的 %C3%A9),则会显示“é”。

我的理解是浏览器发送一个用 UTF-8 编码的“é”(%C3%A9)。

但服务器将此解释为 ISO-8859-1。所以 %C3 被解码为 Ã,%A9 被解码为 ©,然后发回以 UTF-8 编码的响应。

在代码中,请求应该使用 UTF-8 解码:

request.setCharacterEncoding("UTF-8");

但是,如果我发送这个网址:

http://localhost:8080/kjd/index.jsp?q=%E9

“%E9”使用 ISO-8859-1 解码并显示“é”。

为什么这不起作用?为什么使用 ISO-8859-1 对请求进行解码?

我已经在 Tomcat 6 和 7 以及 Windows 和 Ubuntu 上尝试过。

【问题讨论】:

This apache wiki page 可以帮助你;运行它以查看是否可以进行任何更改。 【参考方案1】:

request.setCharacterEncoding("UTF-8"); 只设置请求 body 的编码(用于 POST 请求),而不设置请求 URI 的编码(已被GET 请求使用)。

您需要在Tomcat 的/conf/server.xml&lt;Connector&gt; 元素中将URIEncoding 属性设置为UTF-8,以使Tomcat 将请求URI(和查询字符串)解析为UTF-8。这确实默认为 ISO-8859-1。另请参阅Tomcat HTTP Connector Documentation。

<Connector ... URIEncoding="UTF-8">

或确保使用与正文相同的编码来解析 URI1

<Connector ... useBodyEncodingForURI="true">

另见:

Unicode - How to get the characters right? - JSP/Servlet request

1来自Tomcat's documentation(强调我的):

提供此设置是为了与 Tomcat 4.1.x 兼容,其中 在 contentType 中指定的编码,或使用显式设置 Request.setCharacterEncoding 方法也用于参数 从网址。默认值为 false。


请删除您的 JSP 中的那些 scriptletrequest.setCharacterEncoding("UTF-8"); 在错误的时刻被调用。每当您正确使用 Servlet 来处理请求时,都为时已晚。您宁愿为此使用filter。 response.setCharacterEncoding("UTF-8"); 部分已经由 JSP 顶部的 pageEncoding="UTF-8" 隐式完成。

我还 strongly recommend 将老式的 &lt;%= request.getParameter("q") %&gt; scriptlet 替换为 EL $param.q,或者用 JSTL XML 转义 $fn:escapeXml(param.q) 以防止 XSS attacks。 p>

【讨论】:

请注意,并非所有浏览器都乐意发送 UTF-8 查询参数,看你的 IE :blogs.msdn.microsoft.com/ieinternals/2014/04/22/…【参考方案2】:

您只需取消注释 conf/web.xml(Tomcat 服务器 web.xml)中过滤所有请求并转换为 UTF-8 的代码部分。

 <!-- A filter that sets character encoding that is used to decode -->
 <!-- parameters in a POST request -->
 <filter>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
 </filter>

  <!-- The mapping for the Set Character Encoding Filter -->
  <filter-mapping>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
  </filter-mapping>

就是这样。在tomcat中工作正常

【讨论】:

以上是关于关于jsp中设置编码格式的问题?的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse中设置新创建文件的默认编码格式

ecplise中设置字符编码

Linux中设置vi编辑器的编码格式

JDBC(mysql)中设置写入数据库的默认编码格式为utf-8

JDBC(mysql)中设置写入数据库的默认编码格式为utf-8

在变量中设置日期格式