Sự khác biệt thực sự giữa CSV Excel và CSV tiêu chuẩn là gì?
Ví dụ, khi xử lý các cột có ngắt dòng bên trong một ô, làm thế nào để chúng mã hóa nó khác nhau?
Sự khác biệt thực sự giữa CSV Excel và CSV tiêu chuẩn là gì?
Ví dụ, khi xử lý các cột có ngắt dòng bên trong một ô, làm thế nào để chúng mã hóa nó khác nhau?
Câu trả lời:
Nó hoàn toàn phụ thuộc vào những gì bạn xác định là CSV "tiêu chuẩn". Theo như tôi quan tâm, Excel tuân theo các quy tắc được nêu trong RFC 4180 , "Định dạng chung và Loại MIME cho tệp CSV".
Hãy xem xét một bảng trong đó ô đầu tiên trong hàng đầu tiên có hai dòng ngắt. Trong Excel, nó sẽ trông như sau:
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | col1, line1a | | |
| | col1, line1b | | |
| | col1, line1c | col2, row1 | col3, row1 |
| 2 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Bây giờ, Excel sẽ xuất cái này như thế nào? Hãy xem - một trình soạn thảo văn bản sẽ hiển thị điều này:
"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"
Không tinh vi lắm. Nó chèn một trở lại vận chuyển (hex 0D
) trong đó ngắt dòng là trong tế bào của chúng tôi. Mỗi tế bào được bao quanh bởi dấu ngoặc kép. Ngoài ra, các hàng thực tế được phân tách với một sự trở lại vận chuyển.
Để phân tích chính xác điều này, một trình phân tích cú pháp CSV sẽ cần phải
Nếu nó không làm điều đó, bạn sẽ kết thúc với một thứ bị cắt xén như thế này - lưu ý rằng bây giờ có bốn dòng thay vì hai, vì nó đã không bỏ qua các ngắt dòng.
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | "col1, line1a | | |
| 2 | col1, line1b | | |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Nhưng, hãy xem RFC nói gì, có lẽ Excel đã làm đúng?
Các trường có chứa dấu ngắt dòng (CRLF), dấu ngoặc kép và dấu phẩy phải được đặt trong dấu ngoặc kép.
Gọn gàng, đó chính xác là những gì Excel đã làm. Vì vậy, tóm tắt, Excel dường như tuân theo các đề xuất của tệp CSV "chuẩn". Được cung cấp một trình phân tích cú pháp CSV thích hợp, nó cũng có thể đọc các tệp CSV Excel.
Sự hiểu biết của tôi từ việc triển khai csv ban đầu là tất cả các trường văn bản được đặt trong dấu ngoặc kép và số không cần phải có. Excel không làm điều này và nếu bạn cố tải lên các tệp csv được tạo trên Excel của mình trên các nền tảng không phải là microsoft thì chúng sẽ thất bại. Đây là một cách tiếp cận microsoft tiêu chuẩn, bỏ qua khả năng tương tác và tập trung vào việc tuân theo các quy tắc một cách mù quáng. Một điều tương tự cũng xảy ra với IE, họ đã tuân thủ chính xác các quy tắc html / css cho các thuộc tính phần đệm và lề và bỏ qua thực tế là mọi trang web và trình duyệt web hiện có đối xử với chúng khác nhau. Kết quả là hầu hết mọi trang web hiện nay đều có các quy tắc đặc biệt dành cho IE. Tôi thấy các tệp csv được tạo bởi excel vô dụng và sử dụng một cột các hàm "concatenate" để tự tạo chúng một cách chính xác.