html:form 与 Struts 1.2 的编码问题
Encoding issue in html:form with Struts 1.2
我有一个带有 Struts 1.2 的应用程序,在 .jsp 中,我使用 html 标签创建了一个表单,这是我的代码的一部分:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html-el" prefix="html" %>
...
<html:form action="/myAction" method="post">
...
<display:table name="ListOfEntries" sort="external" requestURI="/myEntryAction.do" uid="row">
...
<display:column titleKey="label.label" sortable="true" sortProperty="label">
<span id="staticlabel<c:out value="${row.id}" />">
<bean:write name="row" property="label" />
</span>
<html:text name="MyEntryForm" property="editedEntry.label" value="${row.label}" disabled="true" style="display:none" size="35"/>
</display:column>
因此,当编辑带有特殊字符 Ç
的条目时,在我的 MyEntryForm
中,我将其作为 Ã
.
提前致谢。
更新:
我忘了说我正在使用 Weblogic。
我在这里看到几个可能的问题和解决方案。
1) 为了正确解码 HTML 文件,您应该 告诉您的浏览器使用什么编码 。你可以通过设置 charset parameter or by setting meta tag 告诉他。在您的 HTML 中,添加此元标记并查看它是否使其在您的浏览器中看起来正确:
对于 HTML4:<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
对于 HTML5:<meta charset="utf-8">
2) 当通过 HTTP 提供页面时,HTML 元标记将被忽略。它仅在客户端将页面保存为本地磁盘系统上的 HTML 文件,然后在浏览器中通过 file:// URI 打开时使用。
因此可能是HTTP请求体编码显然没有设置为UTF-8。请求体编码需要通过
设置
request.setCharacterEncoding("UTF-8");
3) 更改数据库连接编码
打开与 UTF-8 的数据库连接后,应始终使用以下命令一次:
...
mysql_connect();
mysql_query("SET NAMES 'utf8'");
4) 检查数据库的编码。您可以更改数据库的编码:
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
5) 此外,文件应以 UTF-8 格式记录。例如,在 Eclipse 中:左键单击文件 -> 属性 -> 检出 -> 文本文件编码。或者在 Notepad++ 中完成。
所以这些是最常见的问题。如果它不起作用,请向我们提供有关您的问题的更多信息。但主要思想实际上总是相同的:如果您将不同的工具放在一起并组合它们,每个工具都应该知道另一个工具使用的是什么编码。许多问题是由于一个工具误解了另一个工具实际使用的编码。
我找到问题所在了。
在问题中我忘了提到我正在使用 Weblogic 作为服务器。使用 Firefox 或 Chrome 调试我检查了来自浏览器的请求是正确的,具有正确的字符,所以它必须是服务器。
在我的项目中,我有一个 weblogic.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app
xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90
http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
<description>My Struts Application</description>
<context-root>RootOfMyApplication</context-root>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
<show-archived-real-path-enabled>true</show-archived-real-path-enabled>
</container-descriptor>
</weblogic-web-app>
我加上这个问题就解决了:
<charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>UTF-8</java-charset-name>
</input-charset>
</charset-params>
我有一个带有 Struts 1.2 的应用程序,在 .jsp 中,我使用 html 标签创建了一个表单,这是我的代码的一部分:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html-el" prefix="html" %>
...
<html:form action="/myAction" method="post">
...
<display:table name="ListOfEntries" sort="external" requestURI="/myEntryAction.do" uid="row">
...
<display:column titleKey="label.label" sortable="true" sortProperty="label">
<span id="staticlabel<c:out value="${row.id}" />">
<bean:write name="row" property="label" />
</span>
<html:text name="MyEntryForm" property="editedEntry.label" value="${row.label}" disabled="true" style="display:none" size="35"/>
</display:column>
因此,当编辑带有特殊字符 Ç
的条目时,在我的 MyEntryForm
中,我将其作为 Ã
.
提前致谢。
更新: 我忘了说我正在使用 Weblogic。
我在这里看到几个可能的问题和解决方案。
1) 为了正确解码 HTML 文件,您应该 告诉您的浏览器使用什么编码 。你可以通过设置 charset parameter or by setting meta tag 告诉他。在您的 HTML 中,添加此元标记并查看它是否使其在您的浏览器中看起来正确:
对于 HTML4:<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
对于 HTML5:<meta charset="utf-8">
2) 当通过 HTTP 提供页面时,HTML 元标记将被忽略。它仅在客户端将页面保存为本地磁盘系统上的 HTML 文件,然后在浏览器中通过 file:// URI 打开时使用。
因此可能是HTTP请求体编码显然没有设置为UTF-8。请求体编码需要通过
设置request.setCharacterEncoding("UTF-8");
3) 更改数据库连接编码
打开与 UTF-8 的数据库连接后,应始终使用以下命令一次:
...
mysql_connect();
mysql_query("SET NAMES 'utf8'");
4) 检查数据库的编码。您可以更改数据库的编码:
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
5) 此外,文件应以 UTF-8 格式记录。例如,在 Eclipse 中:左键单击文件 -> 属性 -> 检出 -> 文本文件编码。或者在 Notepad++ 中完成。
所以这些是最常见的问题。如果它不起作用,请向我们提供有关您的问题的更多信息。但主要思想实际上总是相同的:如果您将不同的工具放在一起并组合它们,每个工具都应该知道另一个工具使用的是什么编码。许多问题是由于一个工具误解了另一个工具实际使用的编码。
我找到问题所在了。
在问题中我忘了提到我正在使用 Weblogic 作为服务器。使用 Firefox 或 Chrome 调试我检查了来自浏览器的请求是正确的,具有正确的字符,所以它必须是服务器。
在我的项目中,我有一个 weblogic.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app
xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90
http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
<description>My Struts Application</description>
<context-root>RootOfMyApplication</context-root>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
<show-archived-real-path-enabled>true</show-archived-real-path-enabled>
</container-descriptor>
</weblogic-web-app>
我加上这个问题就解决了:
<charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>UTF-8</java-charset-name>
</input-charset>
</charset-params>