آيا تا به حال در هنگام ايجاد صفحات تحت وب خود مانند صفحات JSP و Servlet، زماني كه با زبان فارسي كار مي*كنيد به مشكلاتي مانند نمايش حروف*فارسي به صورت "؟؟؟؟؟؟ ؟؟؟*؟؟؟* ؟؟؟" و يا علائم نا مفهوم برخورده ايد؟

همانطور كه مي*دانيم به علت وجود مشكل تحريم كشور ايران، اكثر كمپاني*هاي بزرگ برنامه*نويسي در آمريكا از زبان فارسي پشتيباني كاملي به عمل نمي*آورند و همين اين امر سبب بروز مشكلات زيادي براي برنامه نويسان ايراني شده است. از جمله اين شركت ها مي توان شركت sun را كه پديد آورنده زبان برنامه سازي جاوا است، مثال زد.

ما در اين مقاله و سلسله مقالات مشابه اين مورد، سعي داريم تا راه كارهايي را جهت مقابله با اين مشكل و رفع آن ارائه دهيم. در اين مقاله نحوه رفع مشكل فارسي نويسي در jsp و servlet مورد بررسي قرار مي گيرد. اين دو تكنولوژي تقريبا از يك خانواده مي باشند به همين خاطر راه حل هاي ارائه شده در اين مقاله در هر يك قابل پياده سازي و اجراست.

در ادامه به صورت فهرست*وار روش هاي مقابله با اين مشكل را بيان مي*نماييم. (* سرور مورد استفاده در اين بحث، Appache Tomcat مي باشد.)



1- در صفحات خود با استفاده از مشخصه contentType و قرار دادن ويژگي charset با مقدار UTF-8 به برنامه اعلام كنيد كه قصد استفاده از يونيكدها را داشته و يونيكد مورد استفاده شما UTF-8 مي باشد. با انجام اين عمل اولين گام در جهت فارسي سازي صفحات خود را برداشته ايد.



<%@ page language=”java”  contentType=”text/html;charset=UTF-8” >


همانطور كه مي دانيد اين تگ معمولا در اولين خط برنامه و پس از تگ HTMLقرار مي گيرد.



2- در برنامه خود و قبل از قسمتي از برنامه كه قرار است اطلاعاتي را ارسال نمايد از تگ زير استفاده نماييد.

<%  request.setCharacterEncoding("UTF-8"); %>




3- اگر در صفحات خود از ابزاري مانند JavaBean و ابزارهاي مشابه آن استفاده نموده*ايد و قرار است به اين صفحات اطلاعاتي با زبان فارسي ارسال كنيد، ابتدا بايد دو مرحله قبل را انجام دهيد. سپس در برنامه مقصد متدي به صورت زير تعريف نماييد و هر جايي كه قرار است اطلاعات دريافت شوند، ابتدا به كمك متد زير، داده هاي دريافتي را به فرمت UTF-8 تبديل كنيد و بعد مورد استفاده قرار دهيد.

public String toUTF8(String isoString){

String utf8String = null;

if (null != isoString && !isoString.equals("")){

try{

byte[] stringBytesISO = isoString.getBytes("ISO-8859-1");

utf8String = new String(stringBytesISO, "UTF-8");

}catch(UnsupportedEncodingException e) {

// TODO: This should never happen. The UnsupportedEncodingException

// should be propagated instead of swallowed. This error would indicate

// a severe misconfiguration of the JVM.

// As we can't translate just send back the best guess.

System.out.println("UnsupportedEncodingException is: " +e.getMessage());

utf8String = isoString;

}

}else {

utf8String = isoString;

}

return utf8String;

}


نحوه استفاده از متد فوق در زمان دريافت اطلاعات :

public void setName(String nameIn){

name=toUTF8(nameIn);

}

public void setfname(String fnameIn){

fname =toUTF8(fnameIn);

}

public void setbalance(float f){

balance= f;

}

public void setno(int noIn){

no = noIn;

}


4- به پوشه conf واقع در محل نصب Tomcat برويد.

...\tomcat\apache-tomcat-6.0.16\conf


حال فايل server.xml را باز كرده و تغييرات زير را در آن اعمال كنيد.



<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>




5- اگر از برنامه NetBeans جهت اجراي برنامه هاي خود استفاده مي كنيد، كافيست تنظيم زير را روي پروژه خود انجام دهيد.

right click on your project in netbeans --> select properties --> goto Sources page --> at bottom of page, change Encoding to UTF-8






اميد است تا در ويرايش هاي بعدي اين مقاله راه حل هاي ديگري را جهت رفع مشكل فارسي نويسي در JSP و Servlet بيان نماييم.