使用Struts 1.2在html:form中编码问题

时间:2016-09-15 09:58:12

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

我有一个使用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 个答案:

答案 0 :(得分:2)

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

1)为了正确解码HTML文件,您应告诉您的浏览器使用哪种编码。您可以通过设置https://example.com或设置charset parameter告诉他。在您的HTML中,添加此元标记,看看是否能让它在您的浏览器中正确显示:

表示HTML4:<meta charset="utf-8">

表示HTML5:request.setCharacterEncoding("UTF-8");

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

因此,可能是HTTP请求正文编码显然未设置为UTF-8。请求正文编码需要由

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

3)更改数据库连接编码

打开与meta tag的数据库连接后,应始终使用以下命令:

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

4)检查数据库的编码。您可以使用以下命令更改数据库的编码:

{{1}}

5)文件也应以UTF-8格式录制。例如,在Eclipse中:左键单击文件 - &gt;属性 - &gt;退房 - &gt;文本文件编码。或者在Notepad ++中进行。

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

答案 1 :(得分:1)

我发现了什么问题。

在这个问题中,我忘了提到我正在使用Weblogic作为服务器。使用Firefox或Chrome进行调试我检查了浏览器的请求是否正确,字符是否正确,因此必须是服务器。

在我的项目中,我有一个weblogic.xml,其中包含以下内容:

POST /_reindex
{
  "source": {
    "index": "old_index"
  },
  "dest": {
    "index": "index_name_v1"
  }
}

我补充说这个问题已经解决了:

<?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>