GotoKnow
  • เข้าระบบ
  • สมัครสมาชิก
  • แผงจัดการ
  • ออกจากระบบ
GotoKnow

ภาษาไทย กับ 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 โดย 

คำสำคัญ (keywords): java
หมายเลขบันทึก: 18898
เขียน:
แก้ไข:
อ่าน:
สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ

ความเห็น (0)