简体   繁体   中英

jsp not passing UTF-8 data in proper format

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> 

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

  1. Preparing / sending the Request from the Client to the Server
  2. Receiving / reading the Request in the Server
  3. Preparing / sending the Response from the Server to the Client
  4. Receiving / reading the Response in the Client

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

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 .

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" />

to

<Connector port="8090" URIEncoding="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:

What can you recommend to just make everything work? (How to use UTF-8 everywhere).

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

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

  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 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM