Hi, all.

I thought about guessing the incoming data's encoding.

How about having a hidden input tag with a default value provided by the server.
When this value comes back, the server could guess the encoding used by looking at the 
bytes of this parameter.

I'd somehow like to see this solved transparently, such as <html:form> will generate a 
form including this hidden tag, and the Struts RequestProcessor will evaluate this 
parameter if present and set the encoding before passing the parameter values to the 
form bean.

What do you think?

Hiran

-----------------------------------------
Hiran Chaudhuri
SAG Systemhaus GmbH
Elsenheimer Straße 11
80867 München
Phone +49-89-54 74 21 34
Fax   +49-89-54 74 21 99


 

> -----Original Message-----
> From: news [mailto:[EMAIL PROTECTED] On Behalf Of Bill Siggelkow
> Sent: Dienstag, 12. Oktober 2004 05:15
> To: [EMAIL PROTECTED]
> Subject: Re: How do I get Chinese & Arabic to/from struts
> 
> Use Tomcat's SetCharacterEncoding filter.
> ======================================================================
> /*
> * Copyright 2004 The Apache Software Foundation
> *
> * Licensed under the Apache License, Version 2.0 (the "License");
> * you may not use this file except in compliance with the License.
> * You may obtain a copy of the License at
> *
> *     http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
> express or implied.
> * See the License for the specific language governing permissions and
> * limitations under the License.
> */
> 
> package filters;
> 
> import java.io.IOException;
> import javax.servlet.Filter;
> import javax.servlet.FilterChain;
> import javax.servlet.FilterConfig;
> import javax.servlet.ServletException;
> import javax.servlet.ServletRequest;
> import javax.servlet.ServletResponse;
> import javax.servlet.UnavailableException;
> 
> 
> /**
>   * <p>Example filter that sets the character encoding to be 
> used in parsing the
>   * incoming request, either unconditionally or only if the 
> client did not
>   * specify a character encoding.  Configuration of this 
> filter is based on
>   * the following initialization parameters:</p>
>   * <ul>
>   * <li><strong>encoding</strong> - The character encoding to 
> be configured
>   *     for this request, either conditionally or 
> unconditionally based on
>   *     the <code>ignore</code> initialization parameter.  
> This parameter
>   *     is required, so there is no default.</li>
>   * <li><strong>ignore</strong> - If set to "true", any 
> character encoding
>   *     specified by the client is ignored, and the value 
> returned by the
>   *     <code>selectEncoding()</code> method is set.  If set 
> to "false,
>   *     <code>selectEncoding()</code> is called 
> <strong>only</strong> if the
>   *     client has not already specified an encoding.  By 
> default, this
>   *     parameter is set to "true".</li>
>   * </ul>
>   *
>   * <p>Although this filter can be used unchanged, it is also easy to
>   * subclass it and make the <code>selectEncoding()</code> method more
>   * intelligent about what encoding to choose, based on 
> characteristics of
>   * the incoming request (such as the values of the 
> <code>Accept-Language</code>
>   * and <code>User-Agent</code> headers, or a value stashed 
> in the current
>   * user's session.</p>
>   *
>   * @author Craig McClanahan
>   * @version $Revision: 1.2 $ $Date: 2004/03/18 16:40:33 $
>   */
> public class SetCharacterEncodingFilter implements Filter {
> 
>      // ----------------------------------------------------- 
> Instance Variables
> 
>      /**
>       * The default character encoding to set for requests 
> that pass through
>       * this filter.
>       */
>      protected String encoding = null;
> 
>      /**
>       * The filter configuration object we are associated 
> with.  If this value
>       * is null, this filter instance is not currently configured.
>       */
>      protected FilterConfig filterConfig = null;
> 
>      /**
>       * Should a character encoding specified by the client 
> be ignored?
>       */
>      protected boolean ignore = true;
> 
>      // 
> --------------------------------------------------------- 
> Public Methods
> 
>      /**
>       * Take this filter out of service.
>       */
>      public void destroy() {
>          this.encoding = null;
>          this.filterConfig = null;
>      }
> 
>      /**
>       * Select and set (if specified) the character encoding 
> to be used to
>       * interpret request parameters for this request.
>       *
>       * @param request The servlet request we are processing
>       * @param result The servlet response we are creating
>       * @param chain The filter chain we are processing
>       *
>       * @exception IOException if an input/output error occurs
>       * @exception ServletException if a servlet error occurs
>       */
>      public void doFilter(ServletRequest request, 
> ServletResponse response,
>                           FilterChain chain)
>          throws IOException, ServletException {
> 
>          // Conditionally select and set the character 
> encoding to be used
>          if (ignore || (request.getCharacterEncoding() == null)) {
>              String encoding = selectEncoding(request);
>              if (encoding != null)
>                  request.setCharacterEncoding(encoding);
>          }
> 
>          // Pass control on to the next filter
>          chain.doFilter(request, response);
>      }
> 
>      /**
>       * Place this filter into service.
>       *
>       * @param filterConfig The filter configuration object
>       */
>      public void init(FilterConfig filterConfig) throws 
> ServletException {
>          this.filterConfig = filterConfig;
>          this.encoding = filterConfig.getInitParameter("encoding");
>          String value = filterConfig.getInitParameter("ignore");
>          if (value == null)
>              this.ignore = true;
>          else if (value.equalsIgnoreCase("true"))
>              this.ignore = true;
>          else if (value.equalsIgnoreCase("yes"))
>              this.ignore = true;
>          else
>              this.ignore = false;
>      }
> 
>      // 
> ------------------------------------------------------ 
> Protected Methods
> 
>      /**
>       * Select an appropriate character encoding to be used, 
> based on the
>       * characteristics of the current request and/or filter 
> initialization
>       * parameters.  If no character encoding should be set, return
>       * <code>null</code>.
>       * <p>
>       * The default implementation unconditionally returns 
> the value configured
>       * by the <strong>encoding</strong> initialization 
> parameter for this
>       * filter.
>       *
>       * @param request The servlet request we are processing
>       */
>      protected String selectEncoding(ServletRequest request) {
>          return (this.encoding);
>      }
> }
> ======================================================================
> Then declare the filter in your web.xml file; setting filter 
> to use "UTF-8" and mapping the filter to all URLs.
> ======================================================================
> <filter>
>      <filter-name>SetCharacterEncodingFilter</filter-name>
>      <filter-class>
>          filters.SetCharacterEncodingFilter
>      </filter-class>
>      <init-param>
>          <param-name>encoding</param-name>
>          <param-value>UTF-8</param-value>
>       </init-param>
>      <init-param>
>          <param-name>ignore</param-name>
>          <param-value>true</param-value>
>       </init-param>
> </filter>
> 
> <filter-mapping>
>      <filter-name>SetCharacterEncodingFilter</filter-name>
>      <url-pattern>/*</url-pattern>
> </filter-mapping>
> ======================================================================
> 
> David Thielen wrote:
> 
> > Hi;
> > 
> >  
> > 
> > I have spent several hours googling on this and all the 
> articles point 
> > to http://www.anassina.com/struts/i18n/i18n.html which 
> apparently no 
> > longer exists.
> > 
> >  
> > 
> > All of my jsp pages are set to be utf-8 using "<meta 
> > http-equiv="Content-Type" content="text/html; 
> charset=utf-8">". All of 
> > my input and text I do using html-el.
> > 
> >  
> > 
> > When I get the text from an input box, it as a&#1234:b so it is not 
> > converting it to unicode. And it ends the char with a : 
> instead of a ;
> > 
> >  
> > 
> > When I pass unicode to a <c:out ./> it doesn't display correctly.
> > 
> >  
> > 
> > What do I need to do differently?
> > 
> >  
> > 
> > Thanks - dave
> > 
> > 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to