แบบที่ 1: ไฟล์ยังดีอยู่ แต่แสดงเป็น �
ถ้าโปรแกรมแก้ไขข้อความ โปรแกรมดูหนัง หรือเบราว์เซอร์แสดงภาษาไทยทั้งหมดเป็น � ส่วนใหญ่ไฟล์ถูกบันทึกเป็น TIS-620 หรือ Windows-874 แต่โปรแกรมอ่านเป็น UTF-8 ไบต์ของตัวอักษรไทยใน TIS-620 ใช้ไม่ได้ใน UTF-8 โปรแกรมจึงใส่ � เฉพาะตอนแสดงผล ในไฟล์ยังมีไบต์ที่ถูกต้องครบ
วิธีแก้: ลากไฟล์ต้นฉบับมาวางในกรอบด้านบน Mojibuster ตรวจการเข้ารหัสตอนอ่านไฟล์และบันทึกใหม่เป็น UTF-8 สำคัญ: ใช้ตัวไฟล์ อย่าคัดลอกข้อความจากโปรแกรม เพราะการคัดลอกจะทำให้ � ติดอยู่ถาวร ดูรายละเอียดที่ แปลง TIS-620 เป็น UTF-8
แบบที่ 2: ? หรือ � ถูกบันทึกลงในข้อความแล้ว
ถ้าโปรแกรมบันทึกหรือส่งต่อข้อความที่มี � ไปแล้ว ตัวอักษรเดิมก็หายไป ? ก็เช่นกัน โปรแกรมจะใส่ ? เมื่อการเข้ารหัสปลายทางไม่มีตัวอักษรนั้น เช่น บันทึกเป็น ASCII หรือเขียนลงคอลัมน์ฐานข้อมูลที่ไม่รองรับภาษาไทย แล้วได้ ???? แทนชื่อลูกค้า
คำนวณย้อนกลับไม่ได้ เพราะตัวอักษรไทยทุกตัวกลายเป็นสัญลักษณ์เดียวกัน Mojibuster จะไม่เดา แต่แจ้งว่ามีกี่ตำแหน่งที่ได้รับผลกระทบ ทางเดียวคือกลับไปที่ต้นทาง: ส่งออกข้อมูลใหม่หรือใช้ไฟล์สำรอง
เครื่องหมายคำถามมาจากไหน
- ฐานข้อมูล: คอลัมน์หรือการเชื่อมต่อใช้
latin1หรือasciiแต่ข้อมูลเข้ามาเป็น UTF-8 MySQL จึงแทนภาษาไทยด้วย?ดู MySQL และ phpMyAdmin - เว็บไซต์ PHP รุ่นเก่า: หน้าเว็บเป็น TIS-620 แต่ไม่ได้ระบุการเข้ารหัสใน header หรือ
<meta charset>เบราว์เซอร์อ่านเป็น UTF-8 และแสดง�ถ้าเชื่อมต่อฐานข้อมูลโดยไม่กำหนดการเข้ารหัส ภาษาไทยจะถูกเก็บเป็น? - Notepad บันทึกเป็น "ANSI": บน Windows ภาษาอังกฤษ ANSI คือการเข้ารหัสแบบตะวันตก ภาษาไทยจึงถูกบันทึกเป็น
?บน Windows ภาษาไทย ANSI คือ Windows-874 ภาษาไทยยังอยู่ แต่อีโมจิและอักขระอื่นจะกลายเป็น? - PowerShell 5.1:
Export-Csvบันทึกเป็น ASCII โดยค่าเริ่มต้น และแทนภาษาไทยด้วย?ดู PowerShell - Python:
encode('ascii', errors='replace')แทนตัวอักษรด้วย?โดยไม่แจ้งเตือน ดู Python และ pandas - หน้าต่าง Command Prompt: ถ้า code page ของคอนโซลไม่มีภาษาไทย จะแสดงเป็น
?ส่วนใหญ่ผิดแค่การแสดงผล ไฟล์ยังถูกต้อง - อีเมลเก่าและโปรแกรมบัญชีเก่า: ข้อความที่ส่งออกเป็น TIS-620 เมื่อเปิดในโปรแกรมที่คาดว่าเป็น UTF-8 จะเห็นเป็น
�
รู้ได้อย่างไรว่าเป็นแบบไหน
- เปิดไฟล์ในโปรแกรมที่แสดงการเข้ารหัส เช่น Notepad++ ถ้าแถบสถานะเขียนว่า "ANSI" หรือ "TIS-620" แสดงว่าเป็นแบบที่ 1
- ลากไฟล์มาวางใน Mojibuster ถ้าอ่านเป็น Windows-874 แล้วภาษาไทยกลับมา แสดงว่าเป็นแบบที่ 1
- ถ้า Mojibuster แจ้งว่ามีตัวอักษรที่หายไป แสดงว่าเป็นแบบที่ 2 ต้องส่งออกข้อมูลใหม่เท่านั้น
ถ้าเห็นตัวอักษรแปลก ๆ อย่าง ä·Â แทนเครื่องหมายคำถาม นั่นเป็นปัญหาอีกแบบ และเกือบทุกครั้งแก้ได้: ภาษาต่างดาวคืออะไร
คำถามที่พบบ่อย
Mojibuster เปลี่ยน ? กลับเป็นภาษาไทยได้ไหม
ไม่ได้ ? อาจเป็นตัวอักษรตัวไหนก็ได้ ข้อมูลหายไปแล้ว Mojibuster จะไม่แตะตำแหน่งเหล่านั้น แต่แจ้งว่ามีกี่ตำแหน่ง
ทำไมโปรแกรมหนึ่งแสดง � แต่อีกโปรแกรมแสดงปกติ
แปลว่าไฟล์ยังดีอยู่ มีแค่โปรแกรมเดียวที่อ่านด้วยการเข้ารหัสผิด แปลงไฟล์เป็น UTF-8 ด้วย Mojibuster แล้วทั้งสองโปรแกรมจะแสดงถูกต้อง
สัญลักษณ์ � คืออะไร
คืออักขระแทนที่ U+FFFD โปรแกรมใส่ไว้เมื่ออ่านไบต์เป็นตัวอักษรไม่ได้ เป็นสัญญาณของปัญหาการเข้ารหัส ไม่ใช่ส่วนหนึ่งของข้อความจริง