【问题标题】:Encoding issue in html:form with Struts 1.2html:form 中的编码问题与 Struts 1.2
【发布时间】:2017-01-23 07:23:27
【问题描述】:

我有一个使用 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。

【问题讨论】:

  • 请提供有关您的数据流的更多信息。您是否将数据保存在数据库中?也许你的数据库还没有准备好 utf-8。
  • 问题是当我编辑条目时,在此之前字符很好,在数据库中存储为Ç。当然,如果我保存编辑的条目,在数据库中存储错误。

标签: jsp utf-8 character-encoding weblogic struts-1


【解决方案1】:

我在这里看到了几个可能的问题和解决方案。

1) 为了正确解码 HTML 文件,您应该告诉浏览器使用什么编码。您可以通过设置charset parameter 或设置meta tag 告诉他。在您的 HTML 中,添加此元标记并查看它是否在您的浏览器中看起来正确:

对于 HTML4:&lt;meta http-equiv="Content-Type" content="text/html;charset=utf-8" /&gt;

对于 HTML5:&lt;meta charset="utf-8"&gt;


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 中:左键单击文件 -> 属性 -> 签出 -> 文本文件编码。或者在记事本++中进行。


所以这些是最常见的问题。如果它不起作用,请向我们提供有关您的问题的更多信息。但主要思想实际上始终是相同的:如果您将不同的工具放在一起并将它们组合起来,那么每个人都应该知道另一个工具中使用的编码是什么。而且很多问题是由于一个工具误解了另一个工具实际使用的编码。

【讨论】:

  • 很好的答案 vlad_rad,谢谢!但我发现了问题所在,我回答了我自己的问题。
【解决方案2】:

我发现了问题所在。

在问题中我忘了提到我正在使用 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多