Thai on Android
หลังจากเมื่อวานลองเล่น emulator ของ Android ดูแล้วพบว่ามันแสดงผลภาษาไทยไม่ได้ ก็ได้คอมเมนต์จาก pradt ทำให้คิดว่าอาจเป็นเพราะฟอนต์ของ Android ไม่มีตัวหนังสือภาษาไทย บวกกับความช่วยเหลือจาก kengggg ทำให้รู้ path ของฟอนต์ที่อยู่ใน emulator
เราสามารถเรียกใช้งาน console ชองตัว emulator ได้เหมือนกับ linux ทั่วไป แต่คำสั่งบางอย่างก็ไม่มีให้ (อย่างเช่น mv หรือ find) ทำให้ตอนใช้งานก็ลำบากอยู่บ้าง แต่ก็สามารถลุยเข้าไปดูในไดเรกทอรีต่างๆ ได้ ลองดูใน /system/fonts ก็เห็นมีไฟล์ฟอนต์อยู่ตามนี้
DroidSans-Bold.ttf
DroidSans.ttf
DroidSansFallback.ttf
DroidSansMono.ttf
DroidSerif-Bold.ttf
DroidSerif-BoldItalic.ttf
DroidSerif-Italic.ttf
DroidSerif-Regular.ttf
ลองแก้เอาโง่ๆ เลยคือ backup ตัวฟอนต์ต้นฉบับเก็บไว้ก่อน จากนั้นก็เอาฟอนต์ Tahoma คือไฟล์ tahoma.ttf กับ tahomabd.ttf มาเปลี่ยนชื่อเป็น DroidSans.ttf กับ DroidSans-Bold.ttf ตามลำดับ แล้วใส่กลับเข้าไปใน emulator แทนฟอนต์เก่าโดยใช้ adb
$ adb push DroidSans.ttf /system/fonts/DroidSans.ttf
$ adb push DroidSans-Bold.ttf /system/fonts/DroidSans-Bold.ttf
ผลที่ได้คือ หน้าเวบที่แสดงผลแบบใช้ฟอนต์ตระกูล sans ก็สามารถแสดงภาษาไทยได้แล้ว
วิธีนี้ออกจะเถื่อนๆ ไปหน่อย เพราะตัวหนังสือภาษาอังกฤษของเดิมก็จะถูกทับไปด้วยตัวหนังสือของฟอนต์ Tahoma ทางที่ดีควรจะเอาไฟล์ฟอนต์ของ emulator มาแก้โดยการเพิ่มตัวหนังสือภาษาไทยเข้าไปมากกว่า แต่คงต้องไปหัดใช้ fontforge เสียก่อน

งมอยู่กับ fontforge นานมาก โง่ไปเลย
ลองแจ้งใน android group ด้วยก็ดีนะครับ เผื่อ developer เข้ามาอ่านจะได้รู้ ปัญหาพวกนี้ฝรั่งมันไม่เคยนึกถึงมาก่อนถ้าเราไม่บอก
ความจริงมันน่าจะเรียกใช้ unicode font ของมันเองด้วยนะ อย่างของไอโฟนมันจะมีฟอนต์อยู่สองชุด อันแรกเอาไว้เรนเดอร์พวกเพจโบราณ ที่ยังยังกำหนด charset เป็นรหัสไว้บนหัว เช่น windows-1252 ทำให้อันนี้ต้องแยกฟอนต์ออกมามากมาย (อันนี้แก้ลำบากนิดนึง เพราะ code ภาษาไทยกับ western มันจะเหลื่อมซ้อนทับกันอยู่ มันจะไปทับพวก accented character เช่น é å á แต่ถ้าไม่ได้อ่านพวกนั้น ก็ไม่มีปัญหาอะไร) ส่วนอีกอันถ้ากำหนด charset เป็น utf-8 มันจะเรียก unicode font ที่รวมฟอนต์ทั้งหมดเอาไว้ (อันนี้แก้ง่ายกว่า เพราะเพิ่มเข้าไปได้ รหัสมันไม่ตรงกันอยู่แล้ว)
ตอนนี้ก็ยังไม่เห็นวิธีแก้สำหรับพวก codepage เลยนอกจากวิธีถึกเข้าไปทับฟอนต์ที่มีอยู่แล้ว หรือไม่ก็ต้องกำหนดให้ system ของมันเลยว่า เจอ 874 หรือ 620 ให้ไปเรียก font ttf ตัวที่มีไทย… ของ apple คาดว่าไม่ได้แน่นอน แต่เจ้านี้น่าจะกำหนดเพิ่มได้นะ