| Document
Details :
ตัวอย่างการใช้งานภาษาไทยกับ
JSP, JDBC thin และ Oracle Database
Environment
ที่ใช้ทดสอบในตัวอย่างนี้
1.
Oracle database 8.1.6, TH8TISASCII Character Set ทำงาน บน Tru64
4.0f
2.
Oracle JDBC
8.1.6 thin
3.
Apache + Jakarta-tomcat-3.2.1
ทำงาน บน MS-windows
4.
Java Version 1.3.0
5.
Browser IE5.x และ Netscape 4.7, encoding แบบ MS874 ทำงาน บน
MS-windows
The
Problem
เนื่องจากขั้นตอนการ
Convert ที่จะทำให้ผิดพลาดนั้นมีได้ทั้งส่วน จาก OS ไปยัง Java
จาก Java ไปยัง Database และในทางกลับกัน [1]
OS
<-> JAVA <-> DB
JDBC
drivers provide transparent support for NLS
แต่เนื่องจากในส่วน
Java ที่ติดต่อกับ Database โดยผ่าน JDBC thin นั้น ในกรณีที่
Database ไม่ใช้ ASCII หรือ ISO-Latin-1 Character set จะมีการ
Conversion ไปเป็น UTF8 ที่ฝั่ง Server Side ส่วนในฝั่ง client
นั้นจะทำการ Convert จาก UTF8 ไปเป็น UCS-2 ขั้นตอนการ convert
เหล่านี้ จะทำงานอย่าง Automatic อยู่แล้ว
Send
and Receive Data in MS874 Streams for JSP/Servlet Applications
[2]
Send
Data in MS874 Streams
เพื่อให้การแสดงข้อมูลที่บน
Browser ฝั่ง Client ที่มีการ encoding ด้วย MS874 ที่ถูกต้อง
เราต้องมีการกำหนด ที่HTML Page โดยเราจะใช้ Page Directive contentType
parameter ในการ set MIME type ของ JSP Page ซึ่ง MIME type นี้จะถูกนำไปใช้กับ
HTTP response ณ ตอนที่เราทำงาน ( Runtime )
Character
Encoding ที่เราใช้ก็ต้องเป็น IANA encoding (IANA. Internet
Assigned Numbers Authority )
อย่างเช่น
UTF-8 หรือ WINDOWS-874
<%@
page contentType="text/html;charset=WINDOWS-874"%>
จากตัวอย่าง
นอกจากจะเป็นการ บอก Browser ให้แสดงเป็น HTML Page ในลักษณะ WINDOWS-874
decoding จะยังรวมไปถึงการ บอก JspWriter ให้ Print ข้อมูลออกเป็น
MS874 encoding ด้วย (การใช้งานแบบนี้จะใช้งานได้ เฉพาะ MS-windows
เท่านั้น ถ้าต้องการใช้งาน Platform อื่นด้วย แนะนำให้ใช้งาน TIS-620
แต่ในตัวอย่างนี้ได้ทดสอบ เฉพาะ WINDOWS-874)
Receive
Data in MS874 Streams
เมื่อเรามีการ
key ข้อมูลผ่านทาง HTML form เราก็ต้องมีส่วนของการควบคุมให้ข้อมูลที่
Key เข้ามามีการ Encoding ที่ถูกต้อง เนื่องจากข้อมูลที่เข้ามา
ผ่านทาง JSP นั้นจะเป็น ISO-8859-1 เราจึงจำเป็นต้อง encoding
กลับไปเป็น MS874 ได้โดย
<%
String
omyEname=request.getParameter("ENAME");
String
myEname = new String(omyEname.getBytes("ISO8859_1"),"MS874");
%>
จากตัวอย่าง
Code ด้านบนเราก็สามารถนำ myEname ไปใช้งานได้อย่างปกติอย่างเช่น
Insert ข้อมูลเข้า Database เป็นต้น
Sample
Complete Code:
ตัวอย่าง
Source Code ที่สมบรูณ์ กดที่นี่
Related
Documents ( download from otn
)
For
additional information on using NLS with the JDBC drivers, refer
to the
"JDBC
Developer's Guide and Reference", (A64685-01), Chapter 5, Advanced
Topics,
'Using NLS'.
For
general information about NLS, such as the NLS_LANG environment
variable,
refer
to the "National Language Support Guide", (A67789-01).
References:
[1]
Technical White Papers "Migrating Oracle Internet Applications
to Support Unicode, An Oracle Technical White Paper, August
2000,
http://technet.oracle.com/products/oracle8i/pdf/ecomwp.pdf
[2]
Technical white Paper "Character Integrity Issues in NLS Environment",
http://technet.oracle.com/tech/java/sqlj_jdbc/htdocs/nlsalert.html
[3]
More resources from java.sun.com
" http://java.sun.com/docs/books/tutorial/i18n/text/string.html
"
" http://java.sun.com/docs/books/tutorial/i18n/
"
" http://java.sun.com/j2se/1.4.1/docs/guide/intl/encoding.doc.html
"
|