You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Pierre Thibaudeau <pi...@gmail.com> on 2007/02/05 22:37:03 UTC

encoding problems: UTF-8 vs ISO-8859-1

I seem to have a problem of consistency between UTF-8 and ISO-8859-1 when it
comes to accepting Strings in forms.  Here's how it goes:

* My application is intended to be entirely UTF-8 encoded:  the database,
the JSP files, etc.
Only exceptions are the localized ApplicationResources_??.properties files,
which are encoded as ISO-8859-1, as per
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html
That part works very well.

* I use Tiles, and I include the following line at the beginning of every
tile and every layout page:
<%@ page contentType="text/html;charset=UTF-8" language="java"
pageEncoding="UTF-8"%>

* Also, in the tile that generates the <HEAD> of the HTML files, I include
the following:
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

So far, everything works fine and all the localized messages display
properly with all the desired accents and diacritic signs.

Everything... except in the case of a text form:
<html:form action="/search" acceptCharset="UTF-8">
 <html:text property="query"/><br/>
 <html:submit titleKey="search.search" >
  <bean:message key="search.executeSearch" />
 </html:submit>
</html:form>

The ActionForm is defined dynamically in the struts-config.xml file:
<form-bean name="NameSearchForm" type="
org.apache.struts.action.DynaActionForm">
    <form-property name="query" type="java.lang.String" />
</form-bean>

And the Action:
    <action
      path="/search"
      name="NameSearchForm"
      scope="request"
      type="com.mystuff.NameSearchAction"
      validate="false">
      <forward name="results" path=".results" redirect="false" />
      <forward name="noresult" path=".noresult" redirect="false" />
    </action>

On input of a query string, the NameSearchAction retrieves this string:
        String queryStr = (String) PropertyUtils.getSimpleProperty(form,
"query");

But that's where I get into trouble.  Suppose, in the text form, I type the
query "César" (the second letter being an e-acute).  If on the following
"noresult" JSP page, I re-display the content of the query, I then get:
"CÃ(c)sar".  (The second and third characters are now respectively an
uppercase-A-tilde and a copyright-sign.)  That, to me, looks like a conflict
between ISO-8859-1 and UTF-8.  Where's the catch?


[Using Struts 1.3.5, Java 5, Tomcat 6.0;  this experiment is run within
Eclipse/MyEclipse 5.1.0.]

Re: encoding problems: UTF-8 vs ISO-8859-1

Posted by Pierre Thibaudeau <pi...@gmail.com>.
Thank you!  Exactly what I needed!  It works great!

2007/2/5, Illya Kysil <ik...@ua.fm>:
>
> >  google://SetCharacterEncodingFilter
>
>

Re: encoding problems: UTF-8 vs ISO-8859-1

Posted by Illya Kysil <ik...@ua.fm>.
Pierre Thibaudeau wrote:
> I seem to have a problem of consistency between UTF-8 and ISO-8859-1 
> when it
> comes to accepting Strings in forms.  Here's how it goes:
> 
> * My application is intended to be entirely UTF-8 encoded:  the database,
> the JSP files, etc.
> Only exceptions are the localized ApplicationResources_??.properties files,
> which are encoded as ISO-8859-1, as per
> http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html
> That part works very well.
> 
> * I use Tiles, and I include the following line at the beginning of every
> tile and every layout page:
> <%@ page contentType="text/html;charset=UTF-8" language="java"
> pageEncoding="UTF-8"%>
> 
> * Also, in the tile that generates the <HEAD> of the HTML files, I include
> the following:
>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
> 
> So far, everything works fine and all the localized messages display
> properly with all the desired accents and diacritic signs.
> 
> Everything... except in the case of a text form:
> <html:form action="/search" acceptCharset="UTF-8">
> <html:text property="query"/><br/>
> <html:submit titleKey="search.search" >
>  <bean:message key="search.executeSearch" />
> </html:submit>
> </html:form>
> 
> The ActionForm is defined dynamically in the struts-config.xml file:
> <form-bean name="NameSearchForm" type="
> org.apache.struts.action.DynaActionForm">
>    <form-property name="query" type="java.lang.String" />
> </form-bean>
> 
> And the Action:
>    <action
>      path="/search"
>      name="NameSearchForm"
>      scope="request"
>      type="com.mystuff.NameSearchAction"
>      validate="false">
>      <forward name="results" path=".results" redirect="false" />
>      <forward name="noresult" path=".noresult" redirect="false" />
>    </action>
> 
> On input of a query string, the NameSearchAction retrieves this string:
>        String queryStr = (String) PropertyUtils.getSimpleProperty(form,
> "query");
> 
> But that's where I get into trouble.  Suppose, in the text form, I type the
> query "César" (the second letter being an e-acute).  If on the following
> "noresult" JSP page, I re-display the content of the query, I then get:
> "CÃ(c)sar".  (The second and third characters are now respectively an
> uppercase-A-tilde and a copyright-sign.)  That, to me, looks like a 
> conflict
> between ISO-8859-1 and UTF-8.  Where's the catch?
> 
> 
> [Using Struts 1.3.5, Java 5, Tomcat 6.0;  this experiment is run within
> Eclipse/MyEclipse 5.1.0.]
> 
google://SetCharacterEncodingFilter

-- 
Illya Kysil
-----------------------------------------------------------------------------
Shakespeare / King Henry IV
GLENDOWER  I can call spirits from the vasty deep.
HOTSPUR    Why, so can I, or so can any man;
            But will they come when you do call for them?


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org