1

我希望 JSP 页面支持 UTF8 数据我可以使用 struts2 和 jsp 进行本地化,但是当我以本地语言从 jsp 上的用户获取数据时,信息不会以正确的格式运行,它正在传递一些抓取的数据。这是我的jsp代码:------

<%@ page language="java" contentType="text/plain; charset=UTF-8"
    pageEncoding="UTF-8"%>
      <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page import="java.util.*"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/plain; charset=UTF-8">
<title><s:text name="global.addnewcustomer"/></title>
<script type="text/javascript" src="http://localhost:9090/AMCMSWeb/basic/validation/Login.js">
</script>
</head>
<body>
<h2 align="center"><s:text name="global.fillinfo"/></h2>
    <s:form action="addcustomeraction" method="post" acceptcharset="UTF-8">

<table align="center" border="1" bgcolor="pink" bordercolor="gray">
<tr>
    <td><s:text name="global.custName"/></td>
    <td>:</td>
    <td><s:textfield name="custName" size="15"></s:textfield></td>
    <td><s:text name="global.custMidleName"/></td><td>:</td><td><s:textfield name="custMidleName" size="15"></s:textfield></td>
    <td><s:text name="global.custLastName"/></td><td>:</td><td><s:textfield name="custLastName" size="15"></s:textfield></td>
</tr>
<tr>
    <td><s:text name="global.mobileNo"/></td><td>:</td><td><s:textfield name="mobileNo" size="15"></s:textfield></td>
    <td><s:text name="global.phoneNo"/></td><td>:</td><td><s:textfield name="phoneNo" size="15"></s:textfield></td>
    <td><s:text name="global.toDate"/>&nbsp;<s:label>(mmm/dd/yyyy)</s:label></td><td>:</td><td><s:textfield name="toDate" size="15" readonly="true">
                <s:param name="value">
                        <s:date name="new java.util.Date()" format="MM/dd/yyyy"/>
                </s:param>
    </s:textfield></td>
</tr>
<tr>
    <td><s:text name="global.atPost"/></td><td>:</td><td><s:textarea name="atPost" cols="15" rows="3"></s:textarea></td>
</tr>
<tr>
    <td><s:text name="global.taluka"/></td><td>:</td><td><s:select list="#{'Miraj':'Miraj','Haveli':'Haveli'}" name="taluka" headerKey="-1" headerValue="Select Taluka" ></s:select></td>
    <td><s:text name="global.district"/></td><td>:</td><td><s:select list="#{'Sangli':'Sangli','Pune':'Pune'}" name="district" headerKey="-1" headerValue="Select District"></s:select></td>
</tr>
<tr>
    <td><s:text name="global.state"/></td>
    <td>:</td>
    <td><s:select list="#{'Maharashtra':'Maharashtra','Karnataka':'Karnataka'}" name="state" headerKey="-1" headerValue="Select State" onchange="list_districts()"></s:select></td>
    <td><s:text name="global.country"/></td><td>:</td><td><s:select  list="#{'India':'India'}" name="country" headerKey="-1" headerValue="Select Country" ></s:select></td>
</tr>
<tr>
    <td><s:text name="global.pinCode"/></td>
    <td>:</td>
    <td><s:textfield name="pinCode"  type="" size="15"></s:textfield></td>
</tr>
</table>

<table align="center" >
     <tr>
        <td><s:submit name="s" key="global.proceed"/></td>  
        <td><input type="button" name="cancel" value="  X  "></td>
     </tr>
</table>
    </s:form>
</body>
</html> 
4

1 回答 1

1

页面(或 web.xml)中指定的字符编码应用于 HTTP 通信的以下阶段:

  1. 准备/发送从客户端到服务器的请求
  2. 在服务器中接收/读取请求
  3. 准备/从服务器发送响应到客户端
  4. 在客户端接收/读取响应

应用服务器是阶段 2的唯一负责人。

您需要查找您的特定应用程序服务器设置,更改默认字符编码(可能很容易ISO-8859-1),并将其更改为在UTF-8.

例如,在 Tomcat 中,您需要conf/server.xml通过将URIEncoding="UTF-8"参数添加到 来编辑文件,<Connector>例如从

<Connector port="8090" />

<Connector port="8090" URIEncoding="UTF-8"/>

在 Apache Wiki 中有一个很好的检查清单,以确保您的所有组件都在 UTF-8 中运行:

你有什么建议让一切正常工作?(如何在任何地方使用 UTF-8)。

使用 UTF-8 作为所有字符的编码是一个安全的选择。这应该适用于几乎所有情况。

为了完全切换到使用 UTF-8,您需要进行以下更改:

  1. 在 server.xml 中设置 URIEncoding="UTF-8"。参考:HTTP 连接器AJP 连接器
  2. 使用默认编码设置为 UTF-8的字符编码过滤器
  3. 更改所有 JSP 以在其 contentType 中包含字符集名称。例如,<%@page contentType="text/html; charset=UTF-8" %> 用于通常的 JSP 页面和<jsp:directive.page contentType="text/html; charset=UTF-8" />XML 语法的页面(也称为 JSP 文档)。
  4. 更改所有 servlet 以设置响应的内容类型并将内容类型中的字符集名称包括为 UTF-8。使用 response.setContentType("text/html; charset=UTF-8")response.setCharacterEncoding("UTF-8")
  5. 更改您使用的任何内容生成库(Velocity、Freemarker 等)以使用 UTF-8 并在它们生成的响应的内容类型中指定 UTF-8。
  6. 在您的字符编码过滤器或 jsp 页面有机会将编码设置为 UTF-8 之前,禁用任何可能读取请求参数的阀门或过滤器。有关详细信息,请参阅 http://www.mail-archive.com/users@tomcat.apache.org/msg21117.html
于 2013-07-01T16:25:55.070 回答