Ostatnio w projekcie pojawił się tajemniczy bug, którego genezy jak dotąd nie udało się ustalić – wstęp rodem z Archiwum X
. Problem polegał na złym wyświetlaniu polskich ogonków, pomimo ustawienia dobrych charsetów w plikach JSP, odpowiedniego kodowania plików i innych cudów na kiju standardowo robionych przy problemie z wyświetlaniem krzaczków zamiast polskich znaków diakrytycznych. Co ciekawsze kiedyś działało i nagle przestało – standard.
Wg ustaleń problem ten związany mógł być z przekazaniem autentykacji do ról JBossa (chodzi o napisanie własnego Realma, który zaczął coś mieszać) albo dziwnym zachowaniem niektórych komponentów RichFaces. Na sto procent nie udało się znaleźć w czym on tkwił, szybko jednak znalazło się rozwiązanie (niestety nie mojego autorstwa – pozdrawiam z tego miejsca mojego kierownika
)
Od tego czasu, każda aplikacja webowa w Javie w której będę maczał swoje paluszki posiadać będzie Filter, który ustawi charset requestu na UTF-8, wg wzoru:
public void doFilter(ServletRequest req,
ServletResponse resp,
FilterChain chain) {
if (req.getCharacterEncoding() == null)
req.setCharacterEncoding("UTF-8");
}
Podpowiedzią do rozwiązania tego problemu, był taki oto wpis w web.xml viewera z pakietu do tworzenia raportów Birt:
<filter>
<description>
Filter to handle request object.
Currently, set request
character encoding to UTF-8.
</description>
<filter-name>ViewerFilter</filter-name>
<filter-class>
org.eclipse.birt.report.filter.ViewerFilter
</filter-class>
</filter>
Także ta buła dotknęła nie pierwszy i nie ostatni projekt w JEE:)
Edit: Po fakcie znalazłem dobrą notkę dla opornych na ten temat.


