Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Stopped clobbering client-provided character encoding; added notes.

...

I cannot find documentation for this environment variable anywhere or what it actually does but it is essential.

Wiki Markup
3. For translation of inputs coming back from the browser there must be a method that translates from the browser's ISO-8859-1 to UTF-8.
It seems to me that
  ISO-8859-1
is used in all regions as I have had people in countries such as Greece & Bulgaria test this and they always send input back in -1 encoding. The method which you will use constantly should go something like this:
 is the default character encoding for servers and browsers according to the
\[http://www.ietf.org/rfc/rfc2616.txt HTTP specification\] section 3.4.1.

No Format
  /**
  * Convert ISO8859ISO-8859-1 format string (which is the default sent by IE
  * to the UTF-8 format that the database is in.
  */
 public String toUTF8(String isoString)
 {
  String utf8String = null;
  if (null != isoString && !isoString.equals(""))
  {
   try
   {
    byte[] stringBytesISO = isoString.getBytes("ISO-8859-1");
    utf8String = new String(stringBytesISO, "UTF-8");
   }
   catch(UnsupportedEncodingException e)
   {
    //  TODO: This should never happen. The UnsupportedEncodingException
    // should be propagated instead of swallowed. This error would indicate
    // a severe misconfiguration of the JVM.

    // As we can't translate just send back the best guess.
    System.out.println("UnsupportedEncodingException is: " +
e.getMessage());
    utf8String = isoString;
   }
  }
  else
  {
   utf8String = isoString;
  }
  return utf8String;
 } 

...

public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
throws IOException, ServletException
{
// Respect the client-specified character encoding
// (see HTTP specification section 3.4.1)
if(null == request.getCharacterEncoding())
request.setCharacterEncoding(encoding);

next.doFilter(request, response);
}

...

Wiki Markup
The suggested solution originates from \[http://people.comita.spb.ru/users/sergeya/java/ruschars.html Sergey Astakhov (all texts are in russian)\] (sergeya@comita.spb.ru)

Important note: Note that this filter should be as far towards the front of your filter chain as possible. If some other code calls request.getParameter (or a similar method) before this filter is invoked, then the encoding will not be set properly, and your parameters will still be decoded improperly.

    • TIP -*

Update the file $CATALINA_HOME/conf/server.xml for UTF-8 support by connectors. Example:

<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="UTF-8"/>

Note that this changes the behavior of reading GET parameters from the request URI and will not affect POST parameters at all.