Tệp CSV: định dạng không có kiểu dữ liệu, không có bảng mã, không có uỷ ban nào
CSV là gì, vì sao cùng một tệp mở ra khác nhau trên hai bảng tính, và quy tắc dấu ngoặc kép nói gì. Chuyển đổi CSV ngay trên trình duyệt, không tải lên.
Tóm tắt nhanh
- Loại
- Tài liệu
- Đuôi tệp
- .csv
- Kiểu MIME
- text/csv
Tệp .csv là một tệp văn bản. Không có phần đầu, không có phiên bản, không có thông tin kiểu dữ liệu và không có gì nhị phân — mở bằng Notepad là bạn thấy từng byte của nó. Mỗi dòng là một hàng, và có thứ gì đó ngăn cách các trường. Đó là toàn bộ định dạng, lý do vì sao thứ gì cũng ghi ra được nó và vì sao không có hai chương trình nào đồng ý về ý nghĩa của nó.
Đọc thêm
Nó tồn tại hai mươi lăm năm mà không có đặc tả. RFC 4180 xuất hiện năm 2005 và được ghi rõ là tài liệu tham khảo (Informational) chứ không phải tiêu chuẩn — nó mô tả những gì phần lớn các bản cài đặt làm chứ không bảo ai phải làm gì. Điều nó thực sự chốt lại là quy tắc dấu ngoặc kép: trường chứa ký tự phân cách, dấu ngoặc kép hay ký tự xuống dòng được bọc trong ngoặc kép, và dấu ngoặc kép bên trong một trường như vậy được viết hai lần. Quy tắc đó là khác biệt giữa “Widget, large” là một ô hay thành hai ô, và đó là quy tắc mà các trình phân tích đơn giản bỏ qua.
Ký tự phân cách không phải lúc nào cũng là dấu phẩy. Một bảng tính chạy ở vùng ngôn ngữ viết số thập phân là 1,5 không thể đồng thời dùng dấu phẩy để ngăn cách các trường, nên Excel xuất ra dấu chấm phẩy ở đó — trên cùng một máy, từ cùng một menu, tạo ra tệp mà nước láng giềng không mở được. Dữ liệu xuất từ cơ sở dữ liệu thường dùng tab. Công cụ nào đọc CSV tốt đều đoán từ vài dòng đầu, và trang này cũng làm như vậy.
Nó cũng không khai báo bảng mã, và đây là nơi dữ liệu thực sự bị mất. Một tệp CSV tên tiếng Trung được lưu bằng chương trình này và mở bằng chương trình khác sẽ thành ký tự rác vì một bên giả định UTF-8 còn bên kia giả định bảng mã của hệ thống. Và vì mọi trường đều là chữ không có kiểu, bảng tính sẽ đoán lại khi nhập: số 0 ở đầu biến mất khỏi mã linh kiện, mã định danh dài thành ký hiệu khoa học, và thứ gì trông giống ngày tháng sẽ bị biến thành ngày tháng. Tệp không có vấn đề gì; cách đọc nó mới có.
Chuyển CSV sang định dạng khác
Câu hỏi thường gặp về CSV
CSV chỉ là tệp văn bản thôi sao?
Đúng vậy, hoàn toàn. Không có định dạng chứa, không nén, không có gì nhị phân. Trình soạn thảo văn bản nào cũng mở được, và những gì bạn thấy là những gì nó chứa.
Vì sao tệp CSV của tôi dùng dấu chấm phẩy?
Vì nó được xuất ở vùng ngôn ngữ dùng dấu phẩy làm dấu thập phân, nên dấu phẩy không thể đồng thời ngăn cách các trường. Nó vẫn là CSV, và trình đọc nào đáng dùng cũng tự nhận ra ký tự phân cách thay vì giả định.
Vì sao số 0 ở đầu của tôi biến mất?
Vì CSV không lưu kiểu dữ liệu và bảng tính đã đoán. “007” trông như số, nên thành 7. Tệp không có gì sai — chính bước nhập đã quyết định như vậy. Phần lớn bảng tính cho phép đặt cột là dạng chữ khi nhập, đó là cách khắc phục đáng tin cậy duy nhất.
Vì sao chữ tiếng Trung của tôi bị lỗi?
Vì tệp không ghi rõ bảng mã của nó và chương trình mở đã đoán khác với chương trình ghi. Lưu dạng UTF-8 có dấu thứ tự byte (BOM) là cách khiến Excel đọc đúng, đổi lại một dấu mà vài công cụ khác hiện thành ký tự lạ.
Có chuyển CSV sang PDF ở đây được không?
Được. Tệp được phân tích đúng chuẩn CSV chứ không cắt theo dấu phẩy, nên các trường trong ngoặc kép được giữ nguyên, và độ rộng cột theo nội dung với hàng tiêu đề in đậm. Kết quả dùng để đọc và in — không gì trong PDF sắp xếp hay tính tổng được.
Còn chuyển sang Excel thì sao?
Không cần: ứng dụng bảng tính nào cũng mở trực tiếp được CSV, và chuyển đổi trước chỉ thêm một bước nữa để kiểu dữ liệu bị đoán. Chuyển đổi có ở đây là theo chiều ngược lại — PDF sang Excel, dựng lại bảng từ một trang chưa từng ghi lại bảng nào.