Also, my application will eventually be put on a web- based hosting provider and I may not have access to the server.xml file. What I want is my application to be fully UTF-8 based regardless of what the server is configured like. The request javax.servlet.Filter system which is configured in the web.xml file seems to be the way to do it.
Thank you, Mircea. ________________________________ From: Ake Tangkannaond <iam...@gmail.com> To: Tomcat Users List <users@tomcat.apache.org> Sent: Wed, 21 April, 2010 14:13:18 Subject: RE: UTF-8 encoding in Tomcat 6.0 Where do you see the recommendation of using filter to handle utf8 char encoding in GET ? -Ake -----Original Message----- From: Mircea LUTIC [mailto:mircea_lu...@yahoo.com] Sent: Wednesday, April 21, 2010 5:57 PM To: Tomcat Users List Subject: Re: UTF-8 encoding in Tomcat 6.0 The filter does get called on my GET request. In my understanding, a filter is the reccomended method of handling UTF-8 for both GET & POST (as well as other methods like HEAD, PUT etc.). When the request is "test.jsp?Name=larevolu%C8%9Bie" as in the example page the EncodingFilter.doFilter function is being called and it calls the EncodingFilter.check function as below Name=request.getParameter("Name"); if (Name!=null) check(Name, lang); and the String Name is incorrect as mentionned in the comment below: void check(String Name, java.util.Locale lang) { int c8=Name.codePointAt(8);//c8=200=C8 // should be 539=21Bh = ț int c9=Name.codePointAt(9);//c9=155=9B // should be 105= 69h = i char ch[]={Name.charAt(8),Name.charAt(9)}; int x=c8+c9; //to have eclipse (Galileo) display the above String s=new String(ch); } server.xml contains the following: <Connector port="8060" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" /> This is because my tomcat 6 is set to work on 8060 with no redirect because this is a debug setting. (some time ago I also had tomcat 5 on 8050 but at that time I didn't check the UTF-8 issue) Thanks for you help. Mircea. ________________________________ From: Ake Tangkannaond <iam...@gmail.com> To: Tomcat Users List <users@tomcat.apache.org> Sent: Wed, 21 April, 2010 12:42:36 Subject: RE: UTF-8 encoding in Tomcat 6.0 Hi Mircea, That filter you wrote is for POST and it has nothing to do with GET request. Have you check the documentation on the conf/server.xml on the following line? <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> -Ake From: Mircea LUTIC [mailto:mircea_lu...@yahoo.com] Sent: Wednesday, April 21, 2010 3:40 PM To: users@tomcat.apache.org Subject: UTF-8 encoding in Tomcat 6.0 Hello, I'm having trouble convincing tomcat 6.0 to take UTF-8 strings. I created an encoding filter with no luck. /** Here is the Utf8 Filter that fails for me in Tomcat 6.0.20 / Eclipse-Galileo / Windows Vista (6.0.6002) <---> Firefox 3.6.3. java version "1.6.0_20" Java(TM) SE Runtime Environment (build 1.6.0_20-b02) Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode) Everything is on my laptop (http://localhost:8060). What I do is create a GET string (based on parameters from a showModalDialog) by script and send it (from Firefox) to the (localhost) server which is running under eclipse with a breakpoint in the EncodingFilter. Note that the system locale is ro_RO (may have an influence) * * set in appl/WebContent/web.xml: * <filter> <filter-name>EncodingFilter</filter-name> <filter-class>ro.lutic.transcode.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> * * set in tomcat/conf/server.xml at <Connector protocol="HTTP/1.1 * URIEncoding="UTF-8" */ public class EncodingFilter implements Filter { private String encoding; private FilterConfig filterConfig; public EncodingFilter() {} public void destroy() {} public void init(FilterConfig fc) throws ServletException { this.filterConfig = fc; this.encoding = filterConfig.getInitParameter("encoding"); } public void doFilter (ServletRequest request ,ServletResponse response , FilterChain chain ) throws IOException, ServletException { String clientEncoding=request.getCharacterEncoding(); String Name; String fileEncoding=System.getProperty("file.encoding"); if (fileEncoding==null || !fileEncoding.equals("UTF-8"))// eclipse says it's already UTF-8 System.setProperty("file.encoding", "UTF-8"); // so this never gets executed if(null == clientEncoding) // this is always null request.setCharacterEncoding(encoding);// so this is always set //String uri=request instanceof HttpServletRequest?((HttpServletRequest)request).getRequestURI():null;if (uri!=null)uri+=""; //window.location=scriptCreatedUrl; // using alert(scriptCreatedUrl) I can see that // GET sent Name=revoluție as Name=revolu%C8%9Bie (correct) Name=request.getParameter("Name"); if (Name!=null) { java.util.Locale lang=request.getLocale();//ro_RO check(Name, lang); check("larevoluție" , lang);// these are ok check("_el_piraña" , lang); check("_qi_gong气功" , lang); check("_psyche_ψυχή" , lang); check("_shalom_שָׁלוֹם" , lang); check("_salaam_سَلاَمٌ" , lang); check("_Baikal_Байка́л", lang); } chain.doFilter(request, response); } void check(String Name, java.util.Locale lang) { int c8=Name.codePointAt(8);//c6=200=C8 // should be 539=21Bh = ț int c9=Name.codePointAt(9);//c7=155=9B // should be 105= 69h = i char ch[]={Name.charAt(8),Name.charAt(9)}; int x=c8+c9; //to have eclipse (Galileo) display the above String s=new String(ch); } } /* * also typed "about:config" in the (Firefox) address bar. Used the filter input to search for "network.standard-url.encode-query-utf8" property. turned it to true & restarted the browser: no luck */ Here is also a page that sends a failing request: <%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>UTF-8</title> <script> function send() { window.location="test.jsp?Name=larevolu%C8%9Bie";//"test.jsp?Name="+escape(Utf8encode("larevoluție")) } </script> </head> <body> <button onclick="send()">send</button> </body> </html> --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org