ตาราง CSV (.csv)
RFC มาตรฐานComma-Separated Values (CSV) คือรูปแบบข้อความธรรมดาที่ใช้กันอย่างแพร่หลายสำหรับข้อมูลแบบตาราง โดยแต่ละบรรทัดแทนระเบียนข้อมูล และแต่ละฟิลด์คั่นด้วยอักขระแบ่งเขตข้อมูล
แปลง XLSX เป็น CSV
ตัวแปลงจาก XLSX เป็น CSV ฟรีในเบราว์เซอร์ แปลงไฟล์ได้ทันทีบนอุปกรณ์ของคุณ
บีบอัด CSV ออนไลน์
เป็นส่วนตัว - ไฟล์จะไม่ออกจากอุปกรณ์ของคุณ
ตรวจสอบไฟล์และข้อมูลเมตา
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ CSV โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็นส่วนหัวระดับไบต์
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ CSV โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็น HEX (OFFSET 0):
ไม่มีลายเซ็นตายตัวการแสดงผลรูปแบบ ASCII: ไบต์ข้อความ โดยการเข้ารหัสอาจแตกต่างกัน
มาตรฐาน: RFC 4180 / IETF
ข้อมูลจำเพาะทางเทคนิค
| สถาปัตยกรรมคอนเทนเนอร์ | ไฟล์ข้อความธรรมดาที่มีการคั่นเขตข้อมูล ซึ่งแสดงแถวและคอลัมน์ของข้อมูลตาราง |
| การบีบอัด | Gzip / Deflate บีบอัดระเบียนข้อมูลตารางที่มีรูปแบบซ้ำกันได้ 85% - 95% |
| การจัดลำดับไบต์ | สตรีมข้อความ UTF-8 (อาจใช้ UTF-8 BOM EF BB BF ซึ่ง Excel ใช้) |
| พื้นที่สี | ไม่เกี่ยวข้อง |
| ช่องสัญญาณและโครงสร้าง | ระเบียนแถวคั่นด้วย CRLF และคอลัมน์คั่นด้วยเครื่องหมายจุลภาค |
| ขนาดสูงสุด | ไม่จำกัดขนาด สามารถสตรีมเป็นกิกะไบต์ได้โดยไม่ต้องโหลดไฟล์ทั้งหมดลงในหน่วยความจำ |
| ความโปร่งใส | ไม่สามารถใช้ได้ |
| การสตรีมและแบบโปรเกรสซีฟ | ไปป์ไลน์ข้อมูลทั้งหมดรองรับการประมวลผลสตรีมทีละบรรทัดในตัว |
ตารางเปรียบเทียบทางเทคนิค: CSV กับคู่แข่ง
| คุณลักษณะทางเทคนิค | CSV (ปัจจุบัน) | Excel (XLSX) | Parquet | JSON |
|---|---|---|---|---|
| ประเภทไฟล์ | ตารางแบบแบนในรูปข้อความธรรมดา | สเปรดชีต XML ที่บีบอัด | การจัดเก็บแบบคอลัมน์ไบนารี | ข้อความแบบลำดับชั้น |
| หลายแผ่นงาน | ไม่มี (มีได้เฉพาะตารางแบบแบนตารางเดียว) | มี (หลายเวิร์กบุ๊กและหลายแผ่นงาน) | การจัดเก็บตามพาร์ทิชัน | อาร์เรย์และออบเจ็กต์ซ้อนกัน |
| ชนิดข้อมูล | ข้อความดิบที่ไม่ได้ระบุชนิด | เซลล์ที่มีชนิดข้อมูล สูตร และการจัดรูปแบบ | ชนิดคอลัมน์ไบนารีที่เข้มงวด | ชนิดข้อมูลพื้นฐาน (สตริง, ตัวเลข, บูลีน) |
| การวิเคราะห์ข้อมูลขนาดใหญ่ | ช้า (ต้องอ่านทุกแถวตามลำดับ) | ไม่เหมาะสำหรับข้อมูลขนาดใหญ่ | เร็วมาก (การเลือกอ่านเฉพาะคอลัมน์และการผลักเงื่อนไขลงไปประมวลผล) | ปานกลาง |
รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex
คอลัมน์เลื่อนไปทางขวาหรือจำนวนแถวไม่ตรงกัน
สาเหตุหลัก: ฟิลด์ข้อความที่มีจุลภาคซึ่งไม่ได้ escape และไม่มีเครื่องหมายคำพูดล้อมรอบ
การกู้คืน: RFC 4180 กำหนดให้เขตข้อมูลที่มีเครื่องหมายจุลภาคต้องล้อมรอบด้วยเครื่องหมายคำพูดคู่: "Smith, John"
อักขระที่มีเครื่องหมายกำกับแสดงเป็นสัญลักษณ์แปลกๆ (เช่น é แทน é) ใน Excel
สาเหตุหลัก: Excel เปิดไฟล์ CSV แบบ UTF-8 โดยสันนิษฐานว่าเป็นรหัสอักขระ Windows ANSI/CP1252 รุ่นเก่า
การกู้คืน: เพิ่มเครื่องหมายระบุลำดับไบต์ UTF-8 ขนาด 3 ไบต์ (0xEF 0xBB 0xBF) ไว้ที่ส่วนเริ่มต้นของไฟล์
การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์
ไฟล์ CSV เปิดได้โดยตรงในโปรแกรมสเปรดชีต เช่น Excel และ Google Sheets ทำให้ผู้ใช้เสี่ยงต่อการโจมตีแบบฉีดสูตร (CSV Injection)
เวกเตอร์การโจมตีที่ทราบ
- การฉีดสูตร: เซลล์ที่ขึ้นต้นด้วย '=', '+', '-', หรือ '@' อาจเรียกใช้มาโครสเปรดชีตหรือคำสั่ง DDE (เช่น '=cmd|' /C calc'!A0')
- การลักลอบส่งข้อมูลออกผ่านสูตร HYPERLINK() ซึ่งส่งข้อมูลในเซลล์ที่ละเอียดอ่อนไปยังเซิร์ฟเวอร์ระยะไกลของผู้โจมตีเมื่อมีการคลิก
แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน: เมื่อส่งออกข้อมูลผู้ใช้เป็น CSV ให้เติมเครื่องหมายคำพูดเดี่ยว (') หรือแท็บไว้หน้าเซลล์ที่ขึ้นต้นด้วย '=', '+', '-', หรือ '@' เพื่อบังคับให้ Excel แสดงเซลล์นั้นเป็นข้อความธรรมดา
ประวัติความเป็นมาและเหตุการณ์สำคัญ
ข้อได้เปรียบและจุดเด่นสำคัญ
- ความเรียบง่ายสูงสุด: อ่านได้ในโปรแกรมแก้ไขข้อความทุกตัว และนำเข้าสู่ฐานข้อมูลและสเปรดชีตทุกประเภทได้
- การสตรีมทีละบรรทัดที่เร็วมากโดยไม่ต้องสร้าง DOM ในหน่วยความจำเต็มรูปแบบ
- เพิ่มภาระให้น้อยที่สุด: ไม่มีไวยากรณ์แท็กที่เยิ่นเย้อหรือข้อกำหนดสคีมา
ข้อจำกัดทางเทคนิคและข้อควรพิจารณา
- ไม่มีชนิดข้อมูลมาตรฐาน: ตัวเลข วันที่ ค่าบูลีน และข้อความทั้งหมดจะถูกจัดเก็บเป็นสตริงดิบ
- ไม่รองรับหลายแผ่นงาน การจัดรูปแบบเซลล์ สูตร หรือเมทาเดตา
- ตัวคั่นที่ขัดแย้งกัน (จุลภาคในข้อความหรือจุลภาคที่ใช้เป็นจุดทศนิยมในยุโรป) ทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์บ่อยครั้ง
เกร็ดความรู้ทางเทคนิคที่น่าสนใจ
- ในหลายประเทศในยุโรปที่ใช้เครื่องหมายจุลภาคเป็นจุดทศนิยม จะใช้เครื่องหมายอัฒภาค (;) แทนเครื่องหมายจุลภาคเป็นตัวคั่น CSV
- ในอดีต Microsoft Excel ต้องใช้ UTF-8 BOM (0xEF 0xBB 0xBF) เพื่อแสดงอักขระที่มีเครื่องหมายกำกับซึ่งไม่ใช่ ASCII ได้อย่างถูกต้อง
- หน่วยงานบริการสุขภาพแห่งชาติของสหราชอาณาจักรทำข้อมูลติดตามผู้สัมผัส COVID-19 สูญหายเกือบ 16,000 รายในปี 2020 เนื่องจากนำเข้าข้อมูลลงในรูปแบบสเปรดชีต Excel รุ่นเก่าที่จำกัดจำนวนแถวไว้ที่ 65,536 แถว
คำถามทางเทคนิคที่พบบ่อย
RFC 4180 คืออะไร
RFC 4180 เป็นมาตรฐานอย่างเป็นทางการของ IETF สำหรับ CSV โดยกำหนดให้ใส่เครื่องหมายคำพูดคู่ล้อมรอบฟิลด์ที่มีจุลภาค การขึ้นบรรทัดใหม่ หรือเครื่องหมายคำพูดคู่ และให้ escape เครื่องหมายคำพูดภายในด้วยการเขียนซ้ำสองครั้ง ("")
ทำไมไฟล์ CSV ถึงเปิดขึ้นมาด้วยอักขระที่เสียหายใน Excel
Microsoft Excel รุ่นเก่าจะใช้หน้ารหัสของ Windows ในเครื่อง (เช่น Windows-1252) เป็นค่าเริ่มต้นแทน UTF-8 เมื่อเปิดไฟล์ CSV โดยตรง การเพิ่ม UTF-8 BOM (Byte Order Mark) ที่ต้นไฟล์จะทำให้ Excel ถอดรหัส UTF-8 ได้อย่างถูกต้อง
CSV Injection (การฉีดสูตร) คืออะไร
CSV Injection เกิดขึ้นเมื่อส่งออกอินพุตที่ไม่น่าเชื่อถือจากผู้ใช้ซึ่งขึ้นต้นด้วยอักขระกระตุ้นสูตร ('=', '+', '-', '@') ไปยังไฟล์สเปรดชีต เมื่อเปิดไฟล์ในโปรแกรมอย่าง Excel โปรแกรมจะเรียกใช้สูตรหรือคำสั่ง Dynamic Data Exchange (DDE) โดยอัตโนมัติ ซึ่งอาจทำให้มีการเรียกใช้คำสั่งระบบหรือส่งข้อมูลออกไป
คู่การแปลงไฟล์ CSV ที่เกี่ยวข้อง
การแปลงไฟล์ Excel เป็นตาราง CSV จะดึงข้อมูลตารางดิบออกมาเป็นรูปแบบข้อความที่ใช้กันอย่างแพร่หลาย เพื่อให้ใช้งานร่วมกับซอฟต์แวร์ต่าง ๆ ได้
การแปลงไฟล์ CSV ที่เป็นข้อความธรรมดาให้เป็นสเปรดชีต XLSX ที่มีฟีเจอร์ครบครันช่วยให้สามารถจัดรูปแบบข้อมูลขั้นสูง ใช้สูตร และสร้างหลายชีตได้
การแปลงไฟล์ข้อความแบบแบนให้เป็นฐานข้อมูลเชิงสัมพันธ์ที่มีโครงสร้าง ช่วยให้คุณสามารถเรียกค้นข้อมูลได้อย่างรวดเร็วและจัดการความสัมพันธ์ของข้อมูลที่ซับซ้อนได้
แปลงสคริปต์สำรองข้อมูลฐานข้อมูลเชิงสัมพันธ์ให้เป็นสเปรดชีตแบบตารางแบน เพื่อการวิเคราะห์ข้อมูลและสร้างรายงานที่ง่ายดาย
การแปลงชุดข้อมูล HDF5 แบบลำดับชั้นเป็นไฟล์ CSV โทรมาตรแบบแบน ช่วยเปลี่ยนบันทึกทางวิทยาศาสตร์หลายมิติที่ซับซ้อนให้เป็นแถวและคอลัมน์อย่างง่ายสำหรับการวิเคราะห์ด้วยสเปรดชีต
การแปลงกริดทางวิทยาศาสตร์ NetCDF หลายมิติเป็นไฟล์ CSV โทรมาตรแบบแบน ช่วยให้ข้อมูลสภาพอากาศและมหาสมุทรที่ซับซ้อนสามารถอ่านได้ในซอฟต์แวร์สเปรดชีตพื้นฐาน
การแปลงไฟล์ vCard เป็น Contacts CSV จะเปลี่ยนบัตรรายชื่อติดต่อแบบลำดับชั้นให้เป็นแถวในสเปรดชีตแบบแบน เพื่อนำเข้าฐานข้อมูลได้ง่าย