UTF-8 Türkçe karakter problemi
Bir internet sitesinin en önemli öğesi içerik olduğuna göre, kullanıcılara sunduğumuz metinlerin doğru görüntülenmeside son derece önemli bir unsurdur. Ayrıca projemiz Türkçe olarak hazırlanıyor bu nedenle Türkçe karakterlerin sorunsuz gösterilmesi de ayrıca dikkat ettiğimiz bir durum. Çünkü ("ı, İ, ç, Ç, ğ, Ğ, ş, Ş, Ü, ü, ö, Ö") yerine kullanılan ("o,s,i,c,g") harfler bazı kelimelerde anlam karmaşasına yol açabiliyor ( öldü , oldu ). Normalde bu sorunun ortadan kalkması için çözüm basittir. html etiketlerinden biri olan <meta> karakter tanımlaması yapmak, istediğiniz karakter setini atamak yeterlidir.
<meta equiv="" type="" content="text/html; charset=utf-8">
Ancak sunucu taraflı uygulamalarda, sunucu tarafından gelen veriler için bu yeterli olmayabiliyor. Bizim projemizde de bunu yaşadık. Sayfa header bilgilerinde taşınan veriler için (form verileri vs.) atadığımız karakter seti işe yaramıyordu. Bizde Java nın JSP/Servlet in güzel imkanlarından faydalanıp bir RequestFilter yazdık.
Sistem basitçe şöyle işliyor. Bir JSP tabanlı web projesinin bir takım ayarlarını web.xml dosyasından ayarlayabilirsiniz. Bahsi geçen xml dosyasına projeniz için filtreler de ekleyebiliyorsunuz. (Birçok "java web projeleri" için hazırlanmış uygulamalar web.xml dosyasına bu tarz filtreler eklerler). Yazmış olduğumuz filtre basit olarak sunucuya gelen request i (talep) kendisinden geçiriyor ve her talep verisini sunucu tarafında atadığımız karakter setine göre filtreliyor.
Peki Filter ı nasıl projemize ekleriz?
Öncelikle yazmış olduğumuz filterin çalışması için bahsettiğimiz gibi web.xml dosyasına filter imizi tanıtmamız gerekiyor.
<filter>
<filter-name>requestEncodingFilter</filter-name>
<filter-class>org.elemanlar.filter.RequestEncodingFilter</filter-class>
<init-param>
<param-name>requestEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
package org.elemanlar.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/*** @author bidi bidi**/
public class RequestEncodingFilter implements Filter {
private FilterConfig config;
private String encoding = "UTF-8";
public void destroy() {}
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
this.config = config;this.encoding = config.getInitParameter("requestEncoding");
}
}
Yaptığımız testler sonucu hiç bir karakter sekteye uğramadan gösterilmiştir. Biz de güzel Türkçemizi sorunsuzca sunabilecek olmanın mutluluğunu yaşamış olduk. Ben o kadar iyi kullanamasam da çok daha fazla hassasiyeti olanlar için ( okaliptus ) iyi bir gelişme oldu.