แก้ CSV ภาษาไทยเพี้ยนใน Excel

ไฟล์ CSV ไม่ได้บอกว่าตัวเองเขียนด้วยชุดอักขระอะไร Excel บน Windows จึงต้องเดา และกับภาษาที่ไม่ใช่อังกฤษมันมักเดาผิด นั่นคือเหตุผลที่ไฟล์รายชื่อภาษาไทยเปิดออกมาเป็นอักขระละตินมีขีดมีหนวดเต็มไปหมด ไม่มีอะไรพัง ไฟล์ปกติดีและ Excel ก็ทำงานตามที่ออกแบบไว้ เรื่องนี้จบได้ด้วยสามไบต์ที่หัวไฟล์ เครื่องมือนี้หาว่าไฟล์เขียนด้วยอะไรจริง ๆ แสดงแถวแรก ๆ ให้ดูว่าอ่านถูกแล้ว แล้วบันทึกสำเนาที่ Excel เปิดได้ถูกต้อง

1 · ไฟล์ที่ Excel อ่านผิด

2 · ที่จริงมันเขียนว่าอะไร

แถวแรก ๆ อ่านด้วยการเข้ารหัสที่ระบบหาได้ ถ้าตรงนี้อ่านถูก ไฟล์ที่ดาวน์โหลดก็จะเปิดถูก

ยังไม่ได้เพิ่มไฟล์

3 · ไฟล์ที่แก้แล้ว

เพิ่มไฟล์เพื่อเริ่ม

คำถามที่พบบ่อย

ทำไม Excel ถึงทำแบบนี้

ไฟล์ CSV คือข้อความล้วน และไฟล์ข้อความไม่ได้ระบุว่าตัวเองใช้ชุดอักขระอะไร Excel บน Windows จึงอ่านด้วย code page ของระบบ เว้นแต่ไฟล์จะขึ้นต้นด้วยสามไบต์ที่เรียกว่า byte-order mark ระบบส่งออกส่วนใหญ่เขียน UTF-8 โดยไม่มี mark นั้น ไฟล์ภาษาไทยจึงมาถูกแต่เปิดผิด ไฟล์ไม่เคยเสียหาย แค่โปรแกรมสองตัวเข้าใจธรรมเนียมไม่ตรงกัน

มันเปลี่ยนอะไรในไฟล์บ้าง

เติมสามไบต์นั้นเข้าไป หรือถ้าเป็นการเข้ารหัสไทยแบบเก่าก็แปลงเป็น UTF-8 ก่อนแล้วค่อยเติม ตัวข้อความไม่ถูกแตะเลย แถวเท่าเดิม คอลัมน์เท่าเดิม ค่าเท่าเดิม ผลลัพธ์เปิดได้ในทุกโปรแกรม และตอนนี้ Excel จะเห็นตรงกับคนอื่นแล้ว

ไฟล์ของฉันถูกอัปโหลดไหม

ไม่ เบราว์เซอร์ของคุณอ่านไบต์ หาการเข้ารหัส แล้วเขียนไฟล์ใหม่ ทั้งหมดในแท็บนี้ นโยบายความปลอดภัยของเว็บกำหนด connect-src ‘none’ เบราว์เซอร์จึงบล็อกการเรียกเครือข่ายจากหน้านี้ ไฟล์ที่ส่งออกมาแล้วตัวอักษรเพี้ยนมักเป็นรายชื่อลูกค้าหรือประวัติคำสั่งซื้อ ซึ่งเป็นไฟล์ประเภทที่ไม่ควรยื่นให้เว็บไหนพอดี

ทำไมไม่บอกให้ใช้ Data แล้ว From Text แทน

เพราะวิธีนั้นใช้ได้แต่ไม่มีใครจำได้ ต้องกดเข้าไปสี่หน้าต่าง และต้องทำใหม่ทุกไฟล์ อีกอย่างมันไม่ช่วยคนที่คุณส่งไฟล์ไปให้ ซึ่งจะดับเบิลคลิกเปิดแล้วเจอตัวประหลาดชุดเดิม การแก้ที่ตัวไฟล์คือการแก้ให้ทุกคนที่เปิดมันต่อจากนี้

ถ้าหาการเข้ารหัสไม่ได้จะเป็นยังไง

มันจะบอกตรง ๆ แล้วไม่ทำอะไร มีแค่สองอย่างที่ยืนยันได้ คือ UTF-8 ที่ถูกต้อง ซึ่งพิสูจน์ได้เพราะลำดับไบต์ที่ผิดจะถูกปฏิเสธทันที และ Windows-874 ของไทย ซึ่งยืนยันได้จากการเจอตัวอักษรไทย นอกจากนั้นคือการเดา และการเดาผิดจะเขียนทับไฟล์คุณให้แย่กว่าตอนเริ่ม

ใช้กับภาษาอื่นได้ไหม

ส่วนที่เติม byte-order mark ใช้ได้กับทุกภาษา ญี่ปุ่น เกาหลี อาหรับ กรีก รัสเซีย และอื่น ๆ ที่เป็น UTF-8 ล้วนเจอปัญหาเดียวกันกับ Excel และแก้ด้วยวิธีเดียวกัน ส่วนที่แปลงการเข้ารหัสตอนนี้เข้าใจแค่ Windows-874 ของไทย เพราะเป็นการเข้ารหัสเก่าที่เครื่องมือนี้ถูกสร้างมาเพื่อมัน