ภาษาไทย กับ Java

ผ่านไปอ่าน ทำjava appแล้วภาษาไทยออกเป็นภาษาเขมรแก้ยังไงดีครับ, อ่านกระทู้อื่นหมดแล้วแต่ไม่รู้เรื่อง เห็นว่าคุณosataken ตอบไว้ดี เลยขออนุญาติ บันทึกเป็น blog ไว้อีกแห่ง

หลักการอ่านไฟล์ภาษาไทย

ถ้าให้พูดง่ายๆ ก็คือกรุณาตรวจสอบ encoding ทุกขั้นตอนครับตั้งแต่อ่านไฟล์ยันแสดงบน TextArea หรือตั้งแต่ Database ยันหน้า jsp

1. ตรวจสอบก่อนครับว่า text file คุณ encode เป็นอะไร
- ถ้าเป็น UTF-8 อ่านด้วย TIS-620 ก็จะอ่านไม่ออกครับ ต้องให้ตรงกัน
UTF-8 เก็บข้อมูลตัวอักขระของภาษาต่างๆในโลกครับ

- ถ้าเป็น ASCII นั้นก็ต้องมาดูอีกครับ ว่า encode ด้วยภาษาอะไร ASCII number มีแค่ 256 ตัวเลขครับ 1-128 ถูกจองไว้สำหรับภาษาอังกฤษ และอักขระพิเศษมาตรฐาน ดังนั้นจึงจำเป็นต้องมี encoding หลายๆแบบเพื่อระบุการแสดงภาษา
สมมติว่าเก็บไฟล์ภาษาไทย ภาษาไทยจะ encode ด้วย TIS620 หรือ ISO8859-11 (ไม่แน่ใจว่าถูกหรือเปล่า) สองตัวนี้ ascii no ตรงกันครับ บางคนคิดว่ามันเป็นตัวเดียวกัน

2. ในส่วนของ code ก็ต้องตรวจสอบเช่นกัน
- ในโปรแกรม default ของจาวาคือ ISO8859_1 ครับ เวลาอ่านภาษาไทยต้องเปลี่ยน encoding เป็น TIS620 ก่อนครับถึงจะอ่านภาษาไทยออก

3. ดูฟอนต์ด้วยครับ
- ต้องดูด้วยว่าฟอนต์ที่เราใช้แสดงภาษาที่ต้องการได้ด้วยหรือเปล่า ถ้าไม่ได้ก็ออกเป็นภาษาเขมรอย่างที่เห็นนั่นล่ะครับ
- ถ้าเป็น UTF-8 ก็เช่นเดียวกันครับ ดูว่าฟอนต์เราแสดง unicode length ที่ต้องการได้หรือ ถ้าไม่ได้จะขึ้นเป็น สี่เหลี่ยม ไม่ก็ ?

ตัวอย่างครับ
ตัวอย่างการอ่านจากไฟล์นั้นให้ใช้ Input/OutputStreamReader ครับจะสามารถกำหนด encoding ได้

CODE
FileInputStream fis fis = new FileInputStream(new File("MyFile.txt"));
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");  must change to appropriate encoding
BufferedReader br = new BufferedReader(isr);


ถ้าไม่อย่างนั้นก็ให้กำหนดเวลาใช้ String แบบที่คุณ aiboat แนะนำครับ
CODE
new String( myString.getBytes("ISO8859-1"), "TIS-620"); // อันนี้เปลี่ยนจาก iso8859_1 >> TIS620


ตัวอย่างเหตุการณ์ครับ

QUOTE
textfile (ASCII:TIS620) ---- InputStreamReader(TIS620) ----> myString ----------------> Panel (Font : MS San Serif)
textfile (UTF-8) ---- InputStreamReader(UTF-8) ----> myString ----------------> Panel (Font : Simsun)  // for Chinese Language


แหล่งข้อมูลเพิ่มเติม
http://www.unicode.org
http://www.langbox.com/codeset.html
http://java.sun.com/j2se/1.4.2/docs/guide/io/io.html

(credit K.osataken)

ถ้ามีการทำงานหลายชั้น ก็ต้องดูละเอียดหน่อยครับ หากใครคิดว่ามีปัญหาที่ database ลองตามอ่านที่ ปัญหาภาษาไทยกับ กับ Mysql

บันทึกนี้เขียนที่ GotoKnow โดย  ใน Patrickz - just a developer



ความเห็น (0)