jsp 未以正确格式传递 UTF-8 数据

2022-01-16 00:00:00 utf-8 character-encoding java jsp struts2

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

I want JSP pages to support UTF8 data I am able to localization with struts2 and jsp but when I take data from user on jsp in local language the information is not going in action in proper format it is passing some grabled data. Here is my jsp code :------

<%@ 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> 

推荐答案

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

The character encoding specified in the page (or in the web.xml) is applied to the following phases of an HTTP communication:

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

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

The Application Server is the only responsible for the phase 2.

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

You need to look for your specific application server settings, to alter the default character encoding (that could easily be ISO-8859-1), and alter it to work in UTF-8.

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

For example, in Tomcat you would need to edit the conf/server.xml file, by adding the URIEncoding="UTF-8" parameter to the <Connector>, for example from

<Connector port="8090" />

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

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

In the Apache Wiki there is a nice list of things to check to make sure all your components are running in UTF-8:

您有什么建议可以让一切正常运行?(如何使用 UTF-8无处不在).

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

Using UTF-8 as your character encoding for everything is a safe bet. This should work for pretty much every situation.

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

In order to completely switch to using UTF-8, you need to make the following changes:

  1. 在 server.xml 中设置 URIEncoding="UTF-8".参考资料:HTTP连接器,AJP连接器.
  2. 使用 字符编码过滤器默认编码设置为 UTF-8
  3. 更改所有 JSP 以在其 contentType 中包含字符集名称.例如,使用 <%@page contentType="text/html; charset=UTF-8" %>对于通常的 JSP 页面和 <jsp:directive.pagecontentType="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.
  1. Set URIEncoding="UTF-8" on your in server.xml. References: HTTP Connector, AJP Connector.
  2. Use a character encoding filter with the default encoding set to UTF-8
  3. Change all your JSPs to include charset name in their contentType. For example, use <%@page contentType="text/html; charset=UTF-8" %> for the usual JSP pages and <jsp:directive.page contentType="text/html; charset=UTF-8" /> for the pages in XML syntax (aka JSP Documents).
  4. Change all your servlets to set the content type for responses and to include charset name in the content type to be UTF-8. Use response.setContentType("text/html; charset=UTF-8") or response.setCharacterEncoding("UTF-8").
  5. Change any content-generation libraries you use (Velocity, Freemarker, etc.) to use UTF-8 and to specify UTF-8 in the content type of the responses that they generate.
  6. Disable any valves or filters that may read request parameters before your character encoding filter or jsp page has a chance to set the encoding to UTF-8. For more information see http://www.mail-archive.com/users@tomcat.apache.org/msg21117.html.

相关文章