代码之家  ›  专栏  ›  技术社区  ›  Alavaros

Struts 1.2的html:form编码问题

  •  1
  • Alavaros  · 技术社区  · 8 年前

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

    2 回复  |  直到 8 年前
        1
  •  2
  •   Jonathan Leffler    7 年前

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

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

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

    对于HTML5: <meta charset="utf-8">


    2) 当通过HTTP提供页面时,将忽略HTML元标记 。只有当客户端将页面保存为本地磁盘系统上的HTML文件,然后通过浏览器中的文件://URI打开时,才能使用该页面。

    request.setCharacterEncoding("UTF-8");
    

    3)

    以下命令应在打开到的数据库连接后始终使用一次 UTF-8 :

    ...
    mysql_connect();
    mysql_query("SET NAMES 'utf8'");
    

    检查数据库的编码

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    

    5) 此外


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

        2
  •  1
  •   Alavaros    8 年前

    我发现了问题所在。

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