JSP is not supported by UTF-8 encoding

When I try to display chineese characters on my jsp page, then unwanted characters will be displayed. What happened, what did I do? I have included the bottom line in my jsp from above, even the problem is not fixed.

<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*"%> <%@ page import="com.hp.sales.om.workflow.c2c.config.model.Organization"%> <%@ page import="com.hp.sales.om.workflow.c2c.config.model.ClassificationL1"%> <%@ page import="com.hp.sales.om.workflow.c2c.config.model.ClassificationL2"%> <%@ page import="com.hp.sales.om.workflow.c2c.config.model.TaskConfig"%> <script type="text/javascript" language="javascript" src="/integration/r5/hpr/js/jquery-1.3.2.js"></script> <script language="JavaScript"> //Javascript code here... </script> <% String taskId = (String) request.getAttribute("taskId"); if (taskId == null || taskId.trim().equals("")) { taskId = ""; %> <jsp:include page="/Header.jsp" /> <%@ taglib uri="http://xmlns.oracle.com/bpel/workflow/worklist-taglib.tld" prefix="worklist"%> <link rel="stylesheet" type="text/css" href="/integration/r5/hpr/css/homepages-v5.css" /> <% Map links = new LinkedHashMap(); links.put("Select Task", request.getContextPath() + "/SelectTask"); String disableCondition = ""; %> <worklist:navLinks linkMap="<%=links%>" styleClass="customBreadCrumbNav" separator=" > " prefixHTML="<strong>" suffixHTML="</strong>" disableConditionBasedOn="<%=disableCondition%>" /> <!-- border table --> <TABLE WIDTH="100%" BORDER="0"> <TR> <TD> <TABLE WIDTH="100%" BORDER="1"> <TR> <TD> <% } else { %> <html> <head> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Select Task</title> </head> <body> <% } %> <br /> <form STYLE="display: inline;" method="POST" name="SelectTask" action="<%=request.getContextPath()%>/SelectTask"> <input type="hidden" name="method" id="method" value='' /> <input type="hidden" name="method" id="method" value='' /> <input type="hidden" name="taskId" id="taskId" value='<%=taskId%>' /> <!-- jQuery Ajax stuff for new way of create task, page not be refresh when choose organization --> <script type="text/javascript"> var servletContextPath = <%=request.getContextPath()%> ";" $(document) .ready( function() { $(window).load(function() { $.ajax({ url : servletContextPath + "/OrganizationLoadServlet", cache : false, beforeSend : function() { //alert(this.url == 'myUrl'); //timeout setting 30second ajax_timeout = setTimeout( function() { //alert('Request is taking a long time.'); }, 30000); // }, success : function( xmlResponse) { var count = 0; $(xmlResponse) .find('ITEMS') .each(function() { count++; }); if (count == 1) { $(xmlResponse).find('ITEMS') .each(function() { }); $.ajax({ type : "GET", url : servletContextPath + "/OrganizationProcessHandler", data : { orgId : $params }, cache : false, beforeSend : function() { ajax_timeout2 = setTimeout( function() { }, 30000); }, success : function(xmlResponse) { $(xmlResponse).find('ITEMS') .each(function() { }); //timeout calling if (ajax_timeout2) { clearTimeout(ajax_timeout2); } } }); } else { $(xmlResponse).find('ITEMS') .each(function() { }); } //timeout calling if (ajax_timeout) { clearTimeout(ajax_timeout); } // }, complete : function() { //alert(this.async == true); } }); }); //Business Process choicebox $("#orgId").change(function() { $.ajax({ type : "GET", url : servletContextPath + "/OrganizationProcessHandler", data : { orgId : $params }, cache : false, beforeSend : function() { //alert(this.url == 'myUrl'); //timeout setting 30second ajax_timeout = setTimeout( function() { //alert('Request is taking a long time.'); }, 30000); // }, success : function(xmlResponse) { $(xmlResponse).find('ITEMS') .each(function() { }); //timeout calling if (ajax_timeout) { clearTimeout(ajax_timeout); } // }, complete : function() { //alert(this.async == true); } }); }); //Task Group handler $("#processId").change(function() { if ($processId.length != 0) { $.ajax({ type : "POST", url : servletContextPath + "/TaskGroupsForOrgAndProcessHandler", data : { orgId : $orgId, processId : $processId }, cache : false, beforeSend : function() { //alert(this.url == 'myUrl'); //timeout setting 30second ajax_timeout = setTimeout( function() { //alert('Request is taking a long time.'); }, 30000); // }, success : function(xmlResponse) { $(xmlResponse).find('ITEMS') .each(function() { //alert("Task Group === "+valTxt); $('<option value="' + valTxt + '">' + labelTxt + '</option>') .appendTo("#taskGrpId"); }); //timeout calling if (ajax_timeout) { clearTimeout(ajax_timeout); } // }, complete : function() { //alert(this.async == true); } }); } }); //Task handler $("#taskGrpId").change(function() { if ($taskGrpId.length != 0) { $.ajax({ type : "POST", url : servletContextPath + "/TaskConfigsHandler", data : { orgId : $orgId, processId : $processId, taskGrpId : $taskGrpId }, cache : false, beforeSend : function() { ajax_timeout = setTimeout( function() { //alert('Request is taking a long time.'); }, 30000); // }, success : function( xmlResponse) { $(xmlResponse).find('ITEMS') .each(function() { }); //timeout calling if (ajax_timeout) { clearTimeout(ajax_timeout); } // }, complete : function() { //alert(this.async == true); } }); } }); }); </script> <!-- endless --> <!-- Layer for during do submition --> <script type="text/javascript"> $(document) .ready( function() { $("#Save").click( function() { var taskConfigId = document .getElementById("taskConfigId").value; if (taskConfigId == null || taskConfigId == '' || taskConfigId == -4 || taskConfigId.length == 0) { alert('Please select task'); } else { getBackToTaskCreationForm(); //Get the screen height and width var maskHeight = $(document).height(); var maskWidth = $(window).width(); //alert("taskConfigId== " +taskConfigId); //Set heigth and width to mask to fill up the whole screen $('#mask').css({ 'width' : maskWidth, 'height' : maskHeight }); //transition effect } }); }); </script> 

-css

the code is here:

  <!-- endless --> <table width="100%" border="0" class="HeaderPane" cellpadding=0 cellspacing=0 height="44" bordercolor="#000000"> <tr width="100%"> <td width="100%" class="customContentText"><strong>Organization:</strong> <select id="orgId" name="orgId"> <option VALUE='-1'>------------ Select Organization ------------</option> </select></td> </tr> <tr width="100%"> <td width="100%" class="customContentText"> <p id="loading" style="margin-left: 80px;"> <img src="/integration/r5/hpr/images/ajax-loader.gif" alt="loading" /> <br />Please wait.... </p> <p id="done"></p> <p id="warning" style="margin-left: 80px;"> <img src="img/warnsign.gif" alt="warning" width="16" height="16" /> <br />Your request has timed out. Please try again. If this condition continues, please contact your administrator. </p> <br /> </td> </tr> <tr width="100%"> <td width="100%" class="customContentText"> <table width="100%" align="center" class="HeaderPane" id="table1"> ------- </table> </td> </form> </table> <!-- Mask to cover the whole screen --> <div id="mask"> <center> <img src="/integration/r5/hpr/images/ajax-loader.gif" alt="loading" /> <br /> <font color="White" size="4"> Please wait....</font> </center> </div> <% if (taskId == null || taskId.trim().equals("")) { %> </TD> </TR> </TABLE> </TD> </TR> </TABLE> <jsp:include page="/Footer.jsp" /> <% } else { %> </body> </html> <% } %> 

web.xml:

 <?xml version = '1.0' encoding = 'GBK'?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns /javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> </web-app> 

Servlet:

 public class OrganizationLoadServlet extends HttpServlet { private static Logger log = Logger.getLogger(OrganizationLoadServlet.class); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Organization[] orgs = (Organization[])session.getAttribute(WorklistappConstants.SESS_ATTR_PREFS_ORGANIZATIONS); if (orgs == null) { orgs = getFilteredOrgs(request); session.setAttribute(WorklistappConstants.SESS_ATTR_PREFS_ORGANIZATIONS, orgs); } log.info("Before: " + response.getCharacterEncoding());//Here I am getting "iso-8859-1" StringBuffer sb = new StringBuffer(); String dislayName = null; for (int i = 0; i < orgs.length; i++) { Organization org = orgs[i]; dislayName = org.getOrgDisplayName(); sb.append("<ITEMS>"); sb.append("<LABEL><![CDATA[" + dislayName + "]]></LABEL>"); sb.append("<VALUE><![CDATA[" + org.getOrgId() + "]]></VALUE>"); sb.append("</ITEMS>"); } response.setContentType("text/xml"); response.setHeader("Cache-Control", "no-cache"); response.getWriter().write("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><ITEM>" + sb.toString() + "</ITEM>"); log.info("After: " + response.getCharacterEncoding());//Here I am getting "iso-8859-1" } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } private Organization[] getFilteredOrgs(HttpServletRequest request) { //code return orgs; } private Organization[] filterOrganizationsByUserOrgs(Organization[] orgs, List<Long> userOrgIdList) { //code return filteredOrgs; } private List<Long> getUserOrgIdList(String userId) throws Exception { //code return userOrgIdList; } private String getUserID(HttpServletRequest request) throws IOException { //code return wfCtx.getUser(); } 

}

See comments in the Servlet class. If I change iso-8859-1 to utf-8 , then I cannot access the application. What's bad about it?

+4
source share
4 answers

The problem here is CDATA . At Servlet, we used iso-8859-1 to send an XML response in XML format. When we tried with UTF-8 , an xml response was not generated. Therefore, instead of sending the xml response from the servlet to jsp, we used this response as an html format and displayed as an html response on a jsp page. This helps in fixing my problem.

In Servlet we changed

 sb.append("<option value="+org.getOrgId()+">"+dislayName+"</option>"); response.setContentType("text/html;charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); response.getWriter().write(sb.toString()); 

Jsp

 $('#orgId').html("<option value=\'-1\'>------------ Select Organization ------------</option>"+xmlResponse); 
0
source

try it

  • After adding your Chinese character Save your JSP under UTF-8 encoding and save it in ISO-8859-1
  • Try adding this line <%@ page contentType="text/html; charset=UTF-8" %> in the JSP header

Hope this helps.

+1
source

Have you ever tried to use the lang attribute for your page?

Something like that:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xml:lang="zh">

0
source

The JSP header you are using is correct.
But, I think the problem may be in setting up the project .
UTF-8 is not the default content type in jsp. Therefore, you need to change the encoding of the project text file in utf-8 .

I have no idea in JDeveloper .... But in Eclipse you can change this way.

 Right Click In Project --> Properties --> Under Resource(Text File Encoding should be selected in "Inherited from Container(UTF-8)" 
0
source

Source: https://habr.com/ru/post/1502370/


All Articles