You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by ros <ro...@palivoda.id.lv> on 2007/02/26 16:36:44 UTC

Re: [S2] how to read request parameter in windows-1257 encoding

In web.xml I found CharacterEncodingFilter with UTF8 and force=true.
That's  why character encoding of the request was UFT-8
(getRequest().getCharacterEncoding() = UFT8)

I've tested all decode combinations with this code:

        Set<String> encs = 
java.nio.charset.Charset.availableCharsets().keySet();
        Iterator<String> itrFrom = encs.iterator();
        while (itrFrom.hasNext()) {
            String encFrom = itrFrom.next();
            Iterator<String> itrTo = encs.iterator();
            while (itrTo.hasNext()) {
                String encTo = itrTo.next();
                try {
                    String value = new
String(getRequest().getParameter("PARAM").getBytes(encFrom), encTo);
                    if (value.indexOf("Ļ") != -1 || value.indexOf("ļ") !=
-1) { 
                        log.debug(encFrom+" -> "+encTo+" = "+value);
                    }
                } catch (Exception e) {
                    log.debug(encFrom+" -> "+encTo+" = ???");
                }
            }
        }

and found that parameter can not be decoded. 

Because I have only one form in win1257 encoding (all others utf8) I've made
custom URI bases set enconding filter:

public class UriEncodingFilter extends CharacterEncodingFilter {

    String forceUriEncodings[];

    /**
     * List of URI=ENCODING values seprated by ';'
     * Filter will set request enconding to the ENCODING value if in request
uri will find URI substring.
     *
     * @param values
     */
    public void setForceUriEncodings(String values) {
        this.forceUriEncodings = values.split(";");
    }

    protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain) throws
ServletException, IOException {

        for (int i=0;i<forceUriEncodings.length;i++)
        {
            int e = forceUriEncodings[i].lastIndexOf("=")-1;
            if ( e != -1 &&
request.getRequestURI().indexOf(forceUriEncodings[i].substring(0, e)) != -1
) {
               
request.setCharacterEncoding(forceUriEncodings[i].substring(e+2));
                filterChain.doFilter(request, response);
                return;
            }
        }

        super.doFilterInternal(request, response, filterChain);

    }
}

and made settings in web.xml

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>...package.UriEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceUriEncodings</param-name>
            <param-value>/aaa.html=Cp1257;/bbb.html=Cp1256;</param-value>
        </init-param>
    </filter>

now it's ok.

Thank you all for help!
-- 
View this message in context: http://www.nabble.com/how-to-read-request-parameter-in-windows-1257-encoding-tf3284137.html#a9160958
Sent from the Struts - User mailing list archive at Nabble.com.


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