Dữ liệu & bảng tính · CSV Trình dọn dẹp
Cách UTF-8 và Windows-1252 Nhầm lẫn: Sửa Mojibake CSV Xuất
· Cách thức hoạt động
csv mã hóa data-cleaning
Khi 'José' trở thành 'José', các byte vẫn ổn và cách diễn giải sai. Bài đăng này giải thích cách hai loại mã hóa phổ biến nhất xung đột với nhau, cách nhận biết các triệu chứng và cách giải mã lại để khắc phục chúng.
Tên có dấu và dấu ngoặc kép biến thành súp biểu tượng — mẫu câu chuyện của tệp UTF-8 được đọc là Windows-1252 và ngược lại
Tên khách hàng trở thành viên kim cương thay thế sau khi tải không phải là bằng chứng cho thấy CSV Cleaner đã phát hiện sai trang mã kế thừa. Cấu hình thì ngược lại: chỉ UTF-8 được hiểu và tệp Windows-1252 hoặc Shift-JIS được đọc dưới dạng UTF-8. Do đó, các chuỗi byte không hợp lệ có thể được thay thế trước khi trình phân tích cú pháp CSV nhìn thấy các ký tự.
Mojibake quen thuộc được căn giữa theo phác thảo, chẳng hạn như Jose, nhưng đường dẫn đọc trình duyệt sử dụng `File.text()` và không cung cấp bộ chọn mã hóa. Bài viết này sửa lại lời hứa đó. Dấu hiệu có thể xử lý bên trong công cụ này là các ký tự thay thế hoặc văn bản bị hỏng, với các byte tệp gốc được giữ nguyên để khôi phục ở nơi khác.
Tệp không phải UTF-8 tiếp cận công cụ này dưới dạng ký tự thay thế, không phải mẫu mojibake đã được xác minh
Tệp được phân tách là byte trên đĩa, trong khi trình phân tích cú pháp hoạt động trên chuỗi JavaScript. Mã hóa xác định ánh xạ giữa các lớp đó. CSV cú pháp đặt tên dấu phẩy, dấu ngoặc kép và ranh giới bản ghi nhưng không mang tuyên bố trên đĩa đáng tin cậy cho `File.text()` ánh xạ kế thừa nào đã tạo ra mỗi byte không phải ASCII.
Khi quá trình giải mã đã tạo ra các ký tự thay thế U+FFFD, các thao tác CSV sau này sẽ nhận các phần giữ chỗ đó dưới dạng văn bản thông thường. Việc cắt bớt hoặc xuất không thể suy ra chuỗi byte hoặc ký tự gốc nào thuộc về chuỗi đó. Đó là lý do tại sao nguồn nguyên vẹn lại quan trọng hơn danh sách tìm và thay thế được tập hợp từ màn hình bị hỏng.
Hai nghi phạm thông thường — các chuỗi nhiều byte của UTF-8 và các byte đơn của Windows-1252 và lý do chúng tạo ra rác có thể dự đoán được khi hoán đổi
UTF-8 đại diện cho các ký tự không phảiASCII với chuỗi nhiều byte. Windows-1252 gán nhiều ký tự phương Tây cho các giá trị byte riêng lẻ. Việc đọc một quy ước này theo một quy ước khác có thể không thành công hoặc tạo ra văn bản sai lệch, nhưng lộ trình này không kiểm tra các bộ giải mã thay thế, chấm điểm ngôn ngữ hợp lý hoặc đưa ra lựa chọn Windows-1252.
Hành vi duy nhất của trình phân tích cú pháp dành riêng cho mã hóa là xóa dấu thứ tự byte U+FEFF UTF-8 hàng đầu sau khi giải mã văn bản. Điều đó ngăn điểm đánh dấu tham gia tiêu đề đầu tiên. Đây không phải là tính năng phát hiện mã hóa chung và không hỗ trợ Shift-JIS, UTF-16 hoặc các trang mã khu vực không được đề cập trong quá trình triển khai.
ToolAcre chấp nhận văn bản UTF-8 và không so sánh các ứng cử viên Windows-1252
Các ký tự thay thế cho biết bộ giải mã văn bản không thể ánh xạ một số byte đầu vào theo cách diễn giải đã chọn của nó. Dấu chấm hỏi có thể đã được chèn vào bằng cách xuất bị mất dữ liệu trước đó, trong trường hợp đó, ký tự gốc có thể đã không còn khả dụng. Một chuỗi à có thể nhận dạng được có thể xuất hiện trong các quy trình công việc khác, nhưng trang này không chẩn đoán lịch sử của nó.
Đừng quyết định mã hóa nguồn chỉ từ một họ. Kiểm tra cài đặt của ứng dụng xuất, nguồn gốc của tệp và trình kiểm tra nhận biết byte để giữ nguyên nguồn. Cảnh báo hàng của trình dọn dẹp liên quan đến việc đóng trích dẫn và chiều rộng cột; chúng không phải là bằng chứng cho thấy việc mã hóa ký tự là chính xác.
Giải mã lại, không phải tìm và thay thế — tại sao cách khắc phục là đọc các byte với mã hóa phù hợp và ghi UTF-8, thay vì vá từng ký tự một
Cách sửa chữa đáng tin cậy là quay trở lại byte gốc và giải mã chúng một lần bằng mã hóa nguồn được ghi lại, sau đó viết UTF-8. Thao tác đó phải diễn ra trước khi mở thông qua đường dẫn văn bản chỉ UTF-8. Việc thay thế các đoạn rác hiển thị sau khi giải mã có thể làm hỏng các lần xuất hiện hợp pháp và không thể phân biệt một số ký tự gốc được thu gọn thành một phần giữ chỗ.
CSV Trình dọn dẹp không có khả năng kiểm soát giải mã lại cấp độ byte, do đó, nó không thể thực hiện chuyển đổi đã hứa của đường viền. Sử dụng phương pháp chuyển đổi nhận biết nguồn đáng tin cậy, so sánh tên đại diện với hệ thống nguồn, sau đó đưa kết quả UTF-8 vào đây cho dấu phân cách, trích dẫn, khoảng trắng và công việc trùng lặp.
Khôi phục từ các byte gốc bên ngoài công cụ này; thay thế ký tự ở đây không thể khôi phục chúng
Để minh họa an toàn, hãy tạo một tệp mã hóa kế thừa nhỏ chứa một tên có dấu và giữ lại bản sao thập lục phân. Tải nó vào công cụ và quan sát xem các ký tự thay thế có xuất hiện hay không. Quan sát đó thiết lập ranh giới UTF-8; nó không thiết lập trang mã gốc chỉ vì tên dự kiến đã được biết.
Tiếp theo, chuyển đổi các byte chưa được xử lý bằng bộ giải mã được chọn rõ ràng bên ngoài ToolAcre, lưu UTF-8 và tải kết quả đó. Tên bây giờ sẽ còn nguyên vẹn trong khi trình phân tích cú pháp CSV xử lý các dấu phân cách một cách bình thường. So sánh hai con đường này sẽ rút ra bài học đúng đắn mà không cần khẳng định rằng trình dọn dẹp đã tự thực hiện quá trình khôi phục.
Ví dụ hoạt động: chứng minh ranh giới UTF-8 mà không yêu cầu sửa chữa không được hỗ trợ
Tệp được mã hóa kép có thể yêu cầu xây dựng lại quá trình chuyển đổi trước đó và dữ liệu đã được lưu bằng dấu hỏi chấm có thể không thể khôi phục được nếu không có nguồn khác. Bài viết này không quy định một sự đảo ngược chung vì việc triển khai không chứa lịch sử mã hóa hoặc chức năng khôi phục bảo toàn byte.
Nó cũng tránh yêu cầu hỗ trợ cho UTF-16, các dạng mã hóa hoặc chuẩn hóa Đông Á. Nếu những điều đó quan trọng, hãy chọn một công cụ chuyển đổi đặt tên và kiểm tra chúng. Phân tích cú pháp CSV thành công chỉ chứng minh các hàng được tìm thấy ở trạng thái dấu phân cách; nó không nói gì về việc liệu việc giải mã ký tự trước giai đoạn đó có trung thực hay không.
Sửa lỗi giải thích một lần — cách sửa chữa mã hóa của ToolAcre CSV Cleaner giải mã lại và mã hóa lại bản xuất trên thiết bị của bạn
ToolAcre có thể loại bỏ UTF-8 BOM ở đầu và sắp xếp chuỗi kết quả dưới dạng UTF-8 CSV thông qua đường dẫn tải xuống của trình duyệt. Nó không thể biến các byte kế thừa tùy ý thành Unicode chính xác vì những byte đó đã vượt qua ranh giới đọc văn bản cố định của trình duyệt mà không có bộ giải mã do người dùng chọn.
Hãy coi các dấu hiệu thay thế như một tín hiệu dừng. Bảo toàn nguồn, xác định mã hóa của nó từ nhà sản xuất, chuyển đổi một lần bằng công cụ nhận biết byte thích hợp và xác minh các tên quan trọng. Chỉ sau đó mới sử dụng CSV Cleaner cho các công việc kết cấu mà cấu hình của nó thực sự hứa hẹn.