ทำไมไฟล์ข้อความจึงกลายเป็นตัวอักษรมั่ว
คุณเปิดไฟล์ .txt แล้วภาษาไทยกลายเป็นสัญลักษณ์ที่อ่านไม่ออกทั้งหมด ไฟล์ไม่ได้เสียหาย ไบต์ทุกตัวยังอยู่ครบ เพียงแต่ถูกตีความด้วยตารางที่ผิด
เกิดอะไรขึ้นกันแน่
ไฟล์ข้อความบรรจุไบต์ และไม่ได้บอกว่าไบต์เหล่านั้นหมายถึงอะไร ไบต์ค่าหนึ่งจะเป็น “ก” หรือเป็นอย่างอื่น ขึ้นอยู่กับการเข้ารหัสที่ใช้ตอนบันทึก และข้อมูลนั้นไม่ได้ถูกเขียนไว้ที่ไหนในไฟล์เลย
โปรแกรมทุกตัวจึง เดา เดาถูกก็ได้อ่านหนังสือ เดาผิดก็ได้สัญลักษณ์
การเข้ารหัสที่เป็นปัญหาสำหรับภาษาไทย
| การเข้ารหัส | มาจากไหน |
|---|---|
| TIS-620 | มาตรฐานไทยตั้งแต่ปี 2533 ไฟล์ไทยเก่าเกือบทั้งหมด |
| CP874 (Windows-874) | ส่วนขยายของ TIS-620 ค่าเริ่มต้นของวินโดวส์ไทย |
| UTF-8 | มาตรฐานปัจจุบัน ครอบคลุมทุกภาษา |
ภาษาไทยเหมือนภาษาเกาหลีตรงที่ตัวอักษรไม่ทับซ้อนกับพื้นที่แอสกี ดังนั้นถ้าเข้ารหัสผิด ข้อความจะเพี้ยน ทั้งหมด ไม่ใช่เพี้ยนแค่บางตัวแบบภาษาตุรกีหรือเยอรมัน
อ่านแล้วน่ารำคาญกว่า แต่ตรวจพบง่ายกว่า คุณจะไม่มีวันอ่านไปถึงบทที่สามแล้วเพิ่งรู้ว่าไฟล์ผิด
แอปทำอะไรอยู่
พูดตรง ๆ ดีกว่า Aurora Reader ลอง UTF-8 ก่อน ถ้าไม่สำเร็จจะถอยไปใช้ Latin-1 มันไม่รู้จัก TIS-620 หรือ CP874 และไม่มีตัวเลือกให้เลือกการเข้ารหัสในหน้าตั้งค่า
Latin-1 นี่เองที่อธิบายว่าทำไมคุณเห็นตัวอักษรมั่วแทนที่จะเห็นข้อความแจ้งข้อผิดพลาด เพราะในการเข้ารหัสนั้นทุกไบต์มีความหมายเสมอ ทางถอยจึง “สำเร็จ” ทุกครั้ง เพียงแต่ให้ข้อความที่ผิด
พฤติกรรมนี้ ถูกบันทึกเป็นบั๊กแล้ว ระหว่างที่ยังไม่ได้แก้ ทางออกคือแปลงไฟล์เอง
บันทึกใหม่เป็น UTF-8
ทำบนคอมพิวเตอร์ ใช้เวลาราวหนึ่งนาที
วินโดวส์ เปิดไฟล์ด้วย Notepad++ ไปที่ Encoding → Character sets → Thai → TIS-620 ดูว่าข้อความอ่านออกหรือยัง แล้วเลือก Encoding → Convert to UTF-8 และบันทึก
macOS และลินุกซ์ บรรทัดเดียวจบ
iconv -f TIS-620 -t UTF-8 book.txt > book-utf8.txt
ทำกับสำเนาเสมอ ถ้าเดาการเข้ารหัสต้นทางผิดแล้วบันทึกทับ ความเสียหายจะแก้คืนไม่ได้
ไม่ใช่ปัญหาฟอนต์
ฟอนต์ที่ไม่มีตัวอักษรจะแสดงเป็น กล่องสี่เหลี่ยม อยู่ในประโยคที่ปกติ ส่วนการเข้ารหัสผิดจะให้ ตัวอักษรคนละตัว และเปลี่ยนฟอนต์ก็ไม่หาย
มีอีกอาการที่ต่างออกไป คือสระและวรรณยุกต์ลอยผิดที่หรือทับกัน นั่นเป็นเรื่องฟอนต์จริง ๆ และแก้ได้ด้วย การใส่ฟอนต์ของคุณเอง
ไม่ใช่ไฟล์เสียหาย
ไฟล์ที่เสียหายมักเปิดไม่ขึ้นเลยหรือหยุดกลางคัน ถ้าทั้งเล่มแสดงผลเป็นตัวอักษรผิดอย่างสม่ำเสมอ แปลว่าไบต์ยังครบ วิธีแยกอยู่ใน ตรวจว่าไฟล์เสียหรือไม่
การเปลี่ยนชื่อไฟล์ไม่ช่วยอะไร เพราะนามสกุลไม่เกี่ยวกับไบต์ข้างใน
ไม่ให้เจออีก
ถ้าหนังสือเล่มเดียวกันมี EPUB ให้เลือก EPUB เพราะ EPUB ประกาศการเข้ารหัสไว้ในตัวไฟล์ ปัญหานี้จึงไม่เกิดตั้งแต่แรก