Seam's CharacterEncodingFilter is broken: its location in the chain is after Request.getParameter(...) is called (by a RichFaces filter), thus making its setCharacterEncoding call useless (since the first Request.getParameter call decodes all request parameters).
The solution is to change its @Filter annotation from:
@Filter(within="org.jboss.seam.web.ajax4jsfFilter")
to:
@Filter(around="org.jboss.seam.web.ajax4jsfFilter")
I would report a JIRA issue for this, but when I log in (using username igx89) there's no Create Issue button (though I've created many issues successfully in the past there)...