ทำไมไฟล์ข้อความจึงกลายเป็นตัวอักษรมั่ว

คุณเปิดไฟล์ .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 ประกาศการเข้ารหัสไว้ในตัวไฟล์ ปัญหานี้จึงไม่เกิดตั้งแต่แรก

บทความทั้งหมด