WebObjects/Web Applications/Development/Localization and Internationalization

      Unicode

      To Enable Unicode for your WO app, add the following to your application constructor:

       WOMessage.setDefaultEncoding("UTF8");
      

      This tells all WOResponse and WORequest to use UTF8 (Unicode).

      Then you just need to tell the browser. Make all your .wo pages include this meta tag in their HTML:

       <html>
       <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      

      Jesse Barnum

      Great tip - here is a simple method call you can stick in your Application object to automatically achieve the results outlined above:

       private boolean enableUTFEncoding = false;
       
       public void enableUTFEncoding() {
         enableUTFEncoding = true;
         WOMessage.setDefaultEncoding(_NSUtilities.UTF8StringEncoding);
       }
       
       public WOResponse dispatchRequest(WORequest theRequest) {
         WOResponse result = super.dispatchRequest(theRequest);
         if( enableUTFEncoding && "text/html".equals(result.headerForKey("content-type")) ) {
           result.setHeader("text/html; charset=UTF-8; encoding=UTF-8", "content-type"); 
         }
         return result;
       }
      

      Helmut Schottmüller

      Unfortunately it's not so easy if you want to use file upload fields and UTF-8 encoding in the same form. Adding a file upload component means that you have to set the form's enctype to "multipart/form-data". To force a multipart form to use UTF-8 encoding usually needs an enctype of "multipart/form-data; charset=UTF-8" but WO is not able to identify such a form as multipart form. You will get a "java.lang.IllegalArgumentException: This form is missing a 'enctype=multipart/form-data' attribute. It is required for WOFileUpload to work." error when you open the form in the browser.

      To make sure that UTF-8 is supported in multipart forms as well, you have to add the following code to your Application object:

       public WORequest createRequest(String aMethod, String aURL, String anHTTPVersion, NSDictionary someHeaders, NSData aContent, NSDictionary someInfo) 
       {
         WORequest newRequest = super.createRequest(aMethod, aURL, anHTTPVersion, someHeaders, aContent, someInfo);
         newRequest.setDefaultFormValueEncoding(_NSUtilities.UTF8StringEncoding);
         return newRequest;
       }
      

      To make WOFileUpload components working I also had to add the launch parameter -WOUseLegacyMultipartParser true to my application. This launch parameter forces the parsing of all form values, the first time WORequest.formValues is called. See the apple developer documentation for additional information. Without -WOUseLegacyMultipartParser true I had serious problems in my applications using a WOFileUpload component because the bindings data and filePath have been emptied after a form POST.

      With Jesse's code and this extension, you will be able to handle UTF-8 character data correctly in your WO application.

      If you use localized strings in your UTF-8 application you may also check out Project Wonder's ERXLocalizer class.

      Last modified on 11 May 2009, at 20:56