செவ்வானச் சிதறல்கள்…

ஒருங்குறி

கடைசியா புடுங்கிய ஆணி – Tamil(Unicode) Characters in Java basedweb application [5.1.2011]

by on Jan.06, 2011, under ஒருங்குறி, கணணி, ஜாவா

கடந்த சில வாரங்களாக எனக்கு இருந்த மிகப் பெரிய ஆணியை ஒருமாதிரி இன்று புடுங்கியாகிவிட்டது. நான் இப்ப வேலை செய்யிறது ஒரு பன்மொழிப் பயன்பாடு உள்ள ஒரு web application. தற்போது ஆங்கிலம் தமிழ் மற்றும் சிங்களம் ஆகியன பயன்படுத்தப்பட்டாலும், இதில கிட்டத்தட்ட 5க்கு மேற்பட்ட இந்திய மொழிகளைக் கொண்டு தரவு உள்ளீடு செய்ய வேண்டி இருக்கும்.

ஆக தரவு எல்லாமே ஒருங்குறியில தான் உள்ளீடு செய்ய வேணும். எங்கட application முழுக்க முழுக்க java வில தான் எழுதினது. Struts, Hibernate மற்றும் Spring ஆகிய framework பயன்படுத்தப்பட்டுள்ளது. database ஆக mysql5.1 பாவிக்கிறம். இந்த database  உருவாக்கேக்க character set = utf8 உம் collate = utf8_generic கும் பயன்படுத்தியிருக்கிறம். இதே போல தான் table உருவாக்கேக்க எல்லாம் மறக்காம utf8 பாவிச்சனாங்கள்.  தவிர database connection pooling க்காக proxool என்டிர API யும் பாவிக்கிறம். அதிலயும் connection settings எல்லாம் சரியாதான் இருந்திச்சு.

<driver-url>jdbc:mysql://localhost:3306/mboxx?useUnicode=true&amp;characterEncoding=UTF-8</driver-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-url>jdbc:mysql://localhost:3306/mboxx?useUnicode=true&amp;characterEncoding=UTF-8</driver-url> <driver-class>com.mysql.jdbc.Driver</driver-class>
மேல இருக்கிற மாதிரி தான் proxool connection string குடுத்தனான். பிறகு form ஒண்டு உருவாக்கேக, jsp page ல meta tag க்கும் ஒழுங்கா தான் குடுத்திருந்தனான்.
<%@ page contentType=”text/html;charset=UTF-8″ import=”java.util.*” language=”java” pageEncoding=”UTF-8″ %>
மற்றும்
<meta http-equiv=”Content-type” content=”text/html; charset=utf-8″/>
முதலாவதா இருக்கிற வரியை [jst tag], jsp page இன்டை தொடக்கத்திலையும், அடுத்த வரியை html page இன்டை head tag க்கு உள்ளையும் எழுதி இருந்தனான். அது மட்டுமில்ல, servlet ல வாற request object ஐ பயன்படுத்த முதல் அதுக்கும் request.setCharacterEncoding(“UTF-8″); என்ட encoding எல்லாம் குடுத்தனான். ஆனா பாருங்கோ, web page ல தமிழ்ழை தட்டி சேமிக்க போனா, à®®à®¾à®²à®µà®©à¯ இப்பிடி தான் கோழி கோழி முட்டை முட்டையா எழுத்துக்கள் வந்திச்சு. இதுவே நேரா database client ஐ பயன்படுத்தி, database ல தமிழில தட்டீட்டு web application ஐ பாவிச்சு பாத்தா அது சரியா தமிழில தெரிஞ்சிச்சு.  என்னடா இது வில்லங்கம் பிடிச்ச ஆணியா கிடக்கு எண்டு கூகுல் சாமிய போட்டு உலுப்புலுப்பெண்டு 3 கிழமையா உலுப்பியும் ஒண்டும் கொட்டுண்டேல்ல. ஒரு கட்டத்தில இதுக்கு வேற வழி எதாவது இருக்கா எண்டு பாத்து தற்காலிகமா ஒரு தீர்வு குடுத்துட்டு மற்ற ஆணிகளைப்பாக்க போட்டன்.
பெரிசா ஒரு தீருவும் சொல்லேல்ல.  http://www.mikezilla.com/exp0012.html இந்த மாற்றிய பாவிச்சு, இதில மேல் பெட்டில தமிழில தட்டீட்டு பக்கத்தில இருக்கிற பொத்தான அமத்தினா, தட்டின எழுத்துக்களுக்கான ஒருங்குறி எழுத்துகளை தரும். உதாரணத்துக்கு, நிரூஜா என்ட பெயரை முதல் பெட்டியில தட்டீட்டு மாற்றியை பாவிச்சா, அதுக்கு சமமான  &#2984;&#3007;&#2992;&#3010;&#2972;&#3006; எண்ட ஒருங்குறி மதிப்புக்களை தரும். இத web application இல உள்ளிட்டா எல்லாம் சட்டபடி வந்திச்சு.
ஆனா, இது ஒரு தீர்வில்ல என்டு தெரிஞ்சாலும், வேற ஆணிகள் இருந்ததால இத அப்பிடியே விட்டுட்டன். இண்டைக்கு ஒரு வழி பண்ணிறதெண்டு, மறுபடியும் தூசு தட்டி பாக்கேக்க தான் ஒரு வழிய கண்டு பிடிச்சன். Spring  பயன்படுத்தேக்க, spring framework க்கிண்ட character encoding filters ஐ பாவிக்கலாம் எண்டு விளங்கிச்சு. web.xml கோப்பில கீழ இருக்கிற coding ஐ போட்டா எல்லாம் சரியாகிடும்.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
இப்பிடி ஒரு வழியா வேலைசெய்ய வச்சாச்சு. இப்ப, request.characterEncoding, எல்லாம் தேவையில்லை. எல்லாம் சரியா வேலைசெய்யுது. ;)
12 Comments :, , , , , , , , , , more...

வந்தவர்கள்

free counters