ผ่านไปอ่าน
ทำ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