ไฟล์ CSV เป็นภาษาต่างดาว? สาเหตุและวิธีแก้ตัวอักษรเพี้ยน
ตัวอักษรแปลก ๆ อย่าง “é” หรือ “Сума” หมายความว่าไฟล์ CSV ถูกบันทึกด้วยการเข้ารหัสข้อความแบบหนึ่ง แต่ถูกเปิดราวกับเป็นอีกแบบ ตัวอักษรยังอยู่ในไฟล์ครบ แค่ถูกถอดรหัสผิด ให้เปิดด้วยการเข้ารหัสที่ถูกต้อง (โปรแกรมดู CSV ตรวจจับให้อัตโนมัติ) แล้วบันทึกสำเนาเป็น UTF-8 ส่วนเครื่องหมายคำถาม (“????”) เป็นอีกเรื่องหนึ่ง มักแปลว่าตัวอักษรหายไปตั้งแต่ตอนเขียนไฟล์แล้ว
การเข้ารหัสคืออะไร ฉบับหนึ่งนาที
ไฟล์ CSV คือข้อความธรรมดา และบนดิสก์ ข้อความเป็นแค่ลำดับของตัวเลข (ไบต์) การเข้ารหัส (encoding) คือตารางที่บอกว่าตัวเลขไหนหมายถึงตัวอักษรอะไร สำหรับตัวอักษรภาษาอังกฤษพื้นฐานและตัวเลข การเข้ารหัสเกือบทุกแบบตรงกัน นี่จึงเป็นเหตุผลที่ตัวเลขในไฟล์ส่งออกจากธนาคารดูปกติ ในขณะที่ชื่อและรายละเอียดกลายเป็นภาษาต่างดาว
สามแบบที่คุณจะเจอในไฟล์ส่งออกจากโปรแกรมบัญชีและธนาคาร
- UTF-8 มาตรฐานสมัยใหม่ เก็บได้ทุกภาษาในไฟล์เดียว ตัวอักษรที่นอกเหนือจากภาษาอังกฤษพื้นฐานใช้สองไบต์ขึ้นไปต่อตัว (ตัวอักษรไทยใช้สามไบต์)
- Windows-1251 การเข้ารหัสแบบไบต์เดียวรุ่นเก่าสำหรับอักษรซีริลลิก (ยูเครน รัสเซีย บัลแกเรีย เซอร์เบีย) โปรแกรมบัญชีรุ่นเก่าหลายตัวยังส่งออกด้วยแบบนี้
- Windows-1252 การเข้ารหัสแบบไบต์เดียวรุ่นเก่าสำหรับภาษายุโรปตะวันตก เช่น é, ü, ñ, ø, € เป็นต้น
สำหรับไฟล์ภาษาไทยจากระบบรุ่นเก่า คุณอาจเจอ TIS-620 หรือ Windows-874 ด้วย ซึ่งเป็นการเข้ารหัสภาษาไทยแบบไบต์เดียว
โดยปกติไฟล์ไม่ได้บอกไว้ว่าใช้การเข้ารหัสแบบไหน โปรแกรมที่เปิดต้องเดาเอา และถ้าเดาผิด คุณจะได้ mojibake ชื่อทางเทคนิคของข้อความเพี้ยนแบบนี้ ที่คนไทยมักเรียกกันว่าภาษาต่างดาว
อ่านภาษาต่างดาว: แต่ละแบบบอกอะไร
ลักษณะของตัวอักษรเพี้ยนเป็นเบาะแสว่าเกิดอะไรผิดพลาด
| คุณเห็น | ที่ควรเป็น | เกิดอะไรขึ้น |
|---|---|---|
é, ü, € |
é, ü, € | ไฟล์ UTF-8 ถูกเปิดเป็น Windows-1252 |
Сума (มี Ð และ Ñ เต็มไปหมด) |
Сума | ซีริลลิกแบบ UTF-8 ถูกเปิดเป็น Windows-1252 |
Ñóìà (อักษรละตินมีเครื่องหมายกำกับ) |
Сума | ไฟล์ Windows-1251 ถูกเปิดเป็น Windows-1252 |
Cafй |
Café | ไฟล์ Windows-1252 ถูกเปิดเป็น Windows-1251 |
� (รูปข้าวหลามตัดสีดำมี ?) |
ตัวอักษรใดก็ได้ | ไฟล์การเข้ารหัสแบบเก่าถูกเปิดเป็น UTF-8 |
???? |
ตัวอักษรใดก็ได้ | ตัวอักษรหายไปตอนบันทึกไฟล์ |
คู่อย่าง “Ô + อะไรสักตัว หรือ “Д/“Ñ” + อะไรสักตัว คือลายนิ้วมือของ UTF-8 ที่ถูกอ่านเป็นการเข้ารหัสแบบเก่า ตัวอักษรที่ไม่ใช่ภาษาอังกฤษแต่ละตัวใช้สองไบต์ใน UTF-8 และตารางแบบเก่าแสดงแต่ละไบต์เป็นสัญลักษณ์แยกกัน ภาษาไทยก็มีลายนิ้วมือคล้ายกัน คำว่า “ไทย” ในไฟล์ UTF-8 ที่ถูกเปิดเป็น Windows-1252 จะกลายเป็น ไทย คือมี “ด หรือ “๔ ซ้ำไปเรื่อย ๆ นี่เป็นข่าวดี เพราะไม่มีอะไรหาย การเปิดไฟล์เป็น UTF-8 ก็แก้ได้ ส่วนไฟล์ TIS-620 หรือ Windows-874 ที่ถูกเปิดเป็น Windows-1252 จะออกมาเป็นอักษรละตินมีเครื่องหมายกำกับ เช่น “ไทย” กลายเป็น ä·Â
เครื่องหมายคำถามล้วน ๆ เป็นข่าวร้าย มักเกิดเมื่อโปรแกรมพยายามบันทึกข้อความด้วยการเข้ารหัสที่ไม่มีช่องสำหรับตัวอักษรเหล่านั้น (เช่น ซีริลลิกหรือภาษาไทยลงใน Windows-1252) แล้วแทนที่ทุกตัวด้วย ? ตัวอักษรต้นฉบับไม่อยู่ในไฟล์แล้ว และไม่มีโปรแกรมไหนกู้คืนได้ วิธีแก้คือส่งออกใหม่จากระบบต้นทาง โดยเลือก UTF-8 หรือการเข้ารหัสตามภูมิภาคที่ถูกต้อง ถ้าหน้าต่างส่งออกมีให้เลือก
BOM: ทำไม Excel อ่าน UTF-8 ผิด
ไฟล์ UTF-8 อาจขึ้นต้นด้วยไบต์ที่มองไม่เห็นสามตัวที่เรียกว่า byte order mark (BOM) เป็นคำใบ้ที่บอกว่า “ไฟล์นี้เป็น UTF-8”
เมื่อคุณดับเบิลคลิก CSV, Excel พึ่งคำใบ้นี้อย่างมาก ถ้ามี BOM มักอ่าน UTF-8 ได้ถูกต้อง ถ้าไม่มี มักเดาว่าเป็นการเข้ารหัสแบบเก่าของเครื่องคุณ และนั่นคือที่มาที่ไฟล์ UTF-8 ดี ๆ จากธนาคารกลายเป็น “Сума” โปรแกรมอื่นบางตัวทำตรงกันข้าม คือแสดง BOM เป็นขยะอย่าง  ไว้หน้าหัวคอลัมน์แรก ถ้าคุณเห็นแบบนั้น แปลว่าไฟล์เป็น UTF-8 และ BOM ถูกแสดงออกมาเป็นข้อความ
วิธีที่ 1: เปิดด้วยการตรวจจับอัตโนมัติ
วิธีที่เร็วที่สุดคือให้เครื่องมือตรวจจับการเข้ารหัสให้ โปรแกรมดู CSV ของ Opener จะลอง UTF-8 ก่อน แล้วถอยไปใช้ Windows-1251 หรือ Windows-1252 ตามลักษณะของข้อความ ชื่อและรายละเอียดจึงแสดงถูกต้องโดยไม่ต้องผ่านตัวช่วยนำเข้า นอกจากนี้ยังตรวจจับตัวคั่นให้ด้วย ไม่ว่าจะเป็นจุลภาค อัฒภาค แท็บ หรือเส้นตั้ง
ไฟล์ถูกอ่านในเบราว์เซอร์ของคุณและไม่ถูกอัปโหลดไปไหน ซึ่งสำคัญสำหรับข้อมูลเงินเดือน ใบแจ้งหนี้ และรายการเดินบัญชี ถ้าจะแก้ไฟล์ให้โปรแกรมอื่นใช้ได้ ให้กดปุ่มส่งออก คุณจะได้สำเนาตารางแบบ UTF-8 ที่สะอาด (เป็นมุมมองปัจจุบัน ถ้าต้องการทุกแถว ให้ล้างคำค้นหาก่อน) โปรดทราบว่าโปรแกรมดู CSV ตรวจจับได้เฉพาะ UTF-8, Windows-1251 และ Windows-1252 ถ้าไฟล์ของคุณเป็น TIS-620 หรือ Windows-874 ให้แปลงเป็น UTF-8 ด้วยวิธีที่ 2 หรือ 3 ก่อน ถ้าปัญหาของคุณคือข้อมูลไปกองอยู่คอลัมน์เดียว ไม่ใช่ตัวอักษรเพี้ยน ดูทำไม CSV เปิดแล้วอยู่คอลัมน์เดียว
วิธีที่ 2: นำเข้าใน Excel โดยเลือก “File origin” ให้ถูก
อย่าดับเบิลคลิกไฟล์ ให้เปิดเวิร์กบุ๊กเปล่าแล้วใช้การนำเข้า “From Text/CSV” ในแท็บ Data หน้าต่างตัวอย่างจะมีรายการ File origin ให้เลือกการเข้ารหัส
- 65001: Unicode (UTF-8) สำหรับไฟล์ที่แสดง
é,Сумаหรือไทย - ตัวเลือก Cyrillic (Windows) หรือ 1251 สำหรับไฟล์ซีริลลิกรุ่นเก่า
- ตัวเลือก Western European (Windows) หรือ 1252 สำหรับไฟล์ยุโรปตะวันตกรุ่นเก่า
- ตัวเลือกภาษาไทย (Windows) หรือ 874 สำหรับไฟล์ภาษาไทยรุ่นเก่า
สลับไปมาแล้วดูตัวอย่าง ทันทีที่ชื่อดูถูกต้อง แสดงว่าเลือกถูกแล้ว จากนั้นโหลดข้อมูล ถ้าต้องส่งไฟล์ต่อ ให้บันทึกจาก Excel ด้วยประเภทไฟล์ “CSV UTF-8” แทน “CSV” ธรรมดา ซึ่งอาจกลับไปใช้การเข้ารหัสแบบเก่าอีก
วิธีที่ 3: Google Sheets, LibreOffice หรือโปรแกรมแก้ไขข้อความ
Google Sheets การนำเข้า CSV ใน Google Sheets (File → Import) ทำงานได้ดีกับไฟล์ UTF-8 และหน้าต่างนำเข้าให้เลือกตัวคั่นได้ แต่ไม่ค่อยน่าพึ่งสำหรับไฟล์การเข้ารหัสแบบเก่า ถ้าไฟล์ Windows-1251, Windows-1252 หรือไฟล์ภาษาไทยแบบเก่ายังแสดงตัวอักษรเพี้ยน ให้แปลงเป็น UTF-8 ด้วยวิธีอื่นก่อน แล้วนำเข้าสำเนานั้น
LibreOffice Calc เมื่อเปิด CSV, LibreOffice จะแสดงหน้าต่างนำเข้าข้อความที่มีรายการ Character set เลือก Unicode (UTF-8), Cyrillic (Windows-1251), Western Europe (Windows-1252) หรือตัวเลือกภาษาไทย แล้วตัวอย่างจะอัปเดตทันที ใช้ได้ฟรีบน Windows, macOS และ Linux
โปรแกรมแก้ไขข้อความ โปรแกรมอย่าง Notepad บน Windows, TextEdit บน macOS หรือโปรแกรมเขียนโค้ดอย่าง VS Code ให้เลือกการเข้ารหัสตอนบันทึกได้ ข้อควรระวังคือโปรแกรมต้อง เปิด ไฟล์ด้วยการเข้ารหัสที่ถูกต้องก่อน ถ้าข้อความในโปรแกรมดูถูกต้อง ให้บันทึกเป็น UTF-8 แต่ถ้าในโปรแกรมก็ยังเพี้ยนอยู่ การบันทึกจะแค่เก็บตัวอักษรเพี้ยนไว้ ให้เปิดใหม่ด้วยการเข้ารหัสที่ถูกต้องก่อน
คำถามที่พบบ่อย
แก้ “????” ใน CSV ได้ไหม?
ส่วนใหญ่ไม่ได้ เครื่องหมายคำถามแปลว่าตัวอักษรถูกแทนที่ตั้งแต่ตอนเขียนไฟล์ ตัวอักษรต้นฉบับจึงไม่อยู่ในไฟล์แล้ว ให้ส่งออกใหม่จากโปรแกรมบัญชีหรือธนาคาร และเลือก UTF-8 ถ้าทำได้
ควรใช้การเข้ารหัสแบบไหนตอนบันทึกหรือส่งออก?
UTF-8 เก็บได้ทุกภาษา และโปรแกรมสมัยใหม่ทุกตัวเข้าใจ ถ้าเพื่อนร่วมงานเปิดไฟล์ด้วยการดับเบิลคลิกใน Excel ให้ใช้ตัวเลือก “CSV UTF-8” ของ Excel เพื่อให้ไฟล์ขึ้นต้นด้วย BOM
เปลี่ยนการเข้ารหัสแล้วตัวเลขจะเปลี่ยนไหม?
ไม่เปลี่ยน ตัวเลข จุด และจุลภาค เหมือนกันใน UTF-8, Windows-1251 และ Windows-1252 จำนวนเงินและวันที่จึงไม่ได้รับผลกระทบ มีแค่ตัวอักษรที่นอกเหนือจากภาษาอังกฤษพื้นฐานที่เปลี่ยน
แก้ไฟล์ที่ส่งออกจากธนาคารผ่านเว็บปลอดภัยไหม?
ปลอดภัยก็ต่อเมื่อเครื่องมือนั้นไม่อัปโหลดไฟล์ โปรแกรมดู CSV ถอดรหัสและส่งออกไฟล์ทั้งหมดในเบราว์เซอร์ของคุณ รายการเดินบัญชีจึงไม่เคยออกจากอุปกรณ์ของคุณ