澄清与 JSP 页面和 Tomcat 一起使用时的 UTF-8 和 ISO-8859-1 编码

Clarification of UTF-8 and ISO-8859-1 encoding when used with JSP pages, and Tomcat

在编码方面,我一定在将两个和两个放在一起时遇到了问题,但是有很多关于编码的 Whosebug 问题,所以我一定不是唯一的问题!目前,我有一个简单的 JSP 页面,该页面有一个 struts 操作表单,其中包含一个默认值为 PÃ mies Olivés 的用户文本输入。

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

<form method="get" action="login.jsp">

<tr><td>Full Name:</td><td><input type="text" name="fullName" value="Pàmies Olivés" size="35"></td></tr>


<tr><td colspan="2"><br><input type="submit" name="submit" value="submit"></td></tr>

如果用户使用该默认值点击提交,我有一个 scriptlet 将用户输入的值输出到页面,以便我可以看到它。当 Tomcat 并且页面的字符集设置为 UTF-8 时,我得到了预期的 Pà mies OlivÉs。但是,如果我尝试在 Tomcat 中使用 ISO-8859-1 编码,我会得到 Pàmies Olivés 的输出,或者如果我将 Tomcat 和页面的字符集都设置为 ISO-8859- 1 值变为 Pàmies Olivés。是什么导致了这种与 ISO-8859-1 编码的差异?

POST 表单数据的编码通常由 form 元素上的 accept-charset 属性控制。

POST 表单定义应如下所示:

<form method="get" action="login.jsp" accept-charset="iso-8859-1" >

对于 GET 请求,HTML 4 建议对查询字符串使用 UTF-8 编码,您将使用的方法是 "GET"。

accept-charset="iso-8859-1" 可能会强制浏览器将查询字符串编码为 iso-8859-1,但我认为它不会很可靠。

相反,尽可能使用 POST。

我理解你的问题可能是学术性的,但我建议你对表单使用 UTF-8,这样你就不会将它们限制为 <255 个唯一字符。