Hướng dẫn

File CSV bị lỗi font, hiện ký tự lạ? Nguyên nhân và cách sửa

Đội ngũ Opener7 phút đọc

Ký tự lạ như “é” hay “Сума” có nghĩa là file CSV được lưu bằng một bảng mã nhưng lại được mở như thể là bảng mã khác — chữ vẫn còn nguyên trong file, chỉ là bị giải mã sai. Hãy mở file bằng đúng bảng mã (Trình xem CSV tự nhận diện) và lưu một bản UTF-8. Dấu hỏi (“????”) thì khác: thường có nghĩa là chữ đã bị mất ngay từ lúc ghi file.

Bảng mã là gì, giải thích trong một phút

File CSV là văn bản thuần, và trên ổ đĩa, văn bản chỉ là một dãy số (byte). Bảng mã (encoding) là bảng quy định số nào ứng với chữ nào. Với chữ cái tiếng Anh cơ bản và chữ số, gần như mọi bảng mã đều giống nhau, vì thế các con số trong file xuất từ ngân hàng trông vẫn ổn trong khi tên và nội dung giao dịch biến thành rác.

Ba bảng mã bạn sẽ gặp trong file xuất từ phần mềm kế toán và ngân hàng:

Bản thân file thường không ghi rõ nó dùng bảng mã nào. Chương trình mở file phải đoán, và nếu đoán sai bạn sẽ thấy mojibake — tên kỹ thuật của loại chữ bị xáo trộn này, thứ mà người dùng Việt Nam hay gọi là “lỗi font”.

Đọc “rác”: mỗi kiểu lỗi nói lên điều gì

Kiểu ký tự rác là manh mối cho biết chuyện gì đã xảy ra.

Bạn thấy Lẽ ra là Chuyện gì đã xảy ra
é, ü, € é, ü, € File UTF-8 bị mở như Windows-1252
Сума (nhiều Ð và Ñ) Сума Chữ Kirin UTF-8 bị mở như Windows-1252
Ñóìà (chữ Latinh có dấu) Сума File Windows-1251 bị mở như Windows-1252
Cafй Café File Windows-1252 bị mở như Windows-1251
� (hình thoi đen có dấu ?) chữ bất kỳ File bảng mã cũ bị mở như UTF-8
???? chữ bất kỳ Chữ bị mất khi lưu file

Những cặp như “Ô + một ký tự, hay “Д/“Ñ” + một ký tự, là dấu hiệu nhận biết UTF-8 bị đọc bằng bảng mã cũ: mỗi chữ không thuộc tiếng Anh chiếm hai byte trong UTF-8, và bảng mã cũ hiển thị mỗi byte thành một ký hiệu riêng. Đó là tin tốt — không có gì bị mất, và mở file dưới dạng UTF-8 là sửa được. Tiếng Việt bị lỗi theo cùng kiểu này trông như “Tiếng Việt” thay vì “Tiếng Việt”, và cũng sửa được theo cách tương tự.

Dấu hỏi thì là tin xấu. Chúng thường xuất hiện khi một chương trình cố lưu văn bản bằng bảng mã không có chỗ cho các chữ đó (ví dụ chữ Kirin vào Windows-1252) và thay mỗi chữ bằng ?. Chữ gốc không còn trong file nữa, và không trình xem nào khôi phục được. Cách sửa là xuất lại từ hệ thống gốc, chọn UTF-8 hoặc đúng bảng mã khu vực nếu hộp thoại xuất có tùy chọn này.

BOM: vì sao Excel đọc sai UTF-8

File UTF-8 có thể bắt đầu bằng ba byte vô hình gọi là byte order mark (BOM). Nó là một gợi ý cho biết “file này là UTF-8”.

Khi bạn bấm đúp vào file CSV, Excel dựa rất nhiều vào gợi ý đó. Có BOM thì Excel thường đọc đúng UTF-8; không có thì nó hay mặc định dùng bảng mã cũ của máy bạn — và đó chính là cách một file xuất UTF-8 hoàn toàn bình thường từ ngân hàng biến thành “Сума”. Các chương trình khác thì ngược lại: chúng hiển thị BOM thành ký tự rác như  ở đầu tiêu đề cột đầu tiên. Nếu bạn thấy vậy, file là UTF-8 và BOM đang bị hiển thị như chữ.

Cách 1: mở bằng công cụ tự nhận diện

Cách nhanh nhất là để công cụ tự nhận diện bảng mã giúp bạn. Trình xem CSV của Opener thử UTF-8 trước, rồi chuyển sang Windows-1251 hoặc Windows-1252 tùy theo nội dung, nên tên và nội dung giao dịch hiển thị đúng mà không cần trình hướng dẫn nhập dữ liệu. Nó cũng nhận diện dấu phân cách — dấu phẩy, chấm phẩy, tab hoặc dấu gạch đứng.

File được đọc trong trình duyệt và không bị tải lên đâu cả, điều quan trọng với bảng lương, hóa đơn và sao kê ngân hàng. Để sửa file cho các chương trình khác, hãy dùng nút xuất: bạn sẽ có một bản UTF-8 sạch của bảng (là chế độ xem hiện tại, nên hãy xóa ô tìm kiếm trước nếu muốn giữ mọi dòng). Nếu vấn đề của bạn là mọi thứ dồn vào một cột chứ không phải chữ bị lỗi, xem vì sao file CSV mở ra chỉ có một cột.

Cách 2: nhập vào Excel với đúng “File origin”

Đừng bấm đúp vào file. Thay vào đó, mở một workbook trống và dùng chức năng nhập “From Text/CSV” trên tab “Data”. Cửa sổ xem trước có danh sách File origin, nơi bạn chọn bảng mã:

Chuyển qua lại giữa các tùy chọn và theo dõi bản xem trước — khi tên hiển thị đúng là bạn đã chọn đúng. Sau đó tải dữ liệu vào. Nếu cần gửi file đi tiếp, hãy lưu từ Excel bằng loại file “CSV UTF-8” thay vì “CSV” thường, vì loại này có thể lại dùng bảng mã cũ.

Cách 3: Google Sheets, LibreOffice hoặc trình soạn thảo văn bản

Google Sheets. Nhập file CSV vào Google Sheets (File → Import) hoạt động tốt với file UTF-8, và hộp thoại nhập cho phép chọn dấu phân cách. Với file bảng mã cũ thì cách này kém tin cậy hơn: nếu file xuất Windows-1251 hoặc Windows-1252 vẫn hiện chữ lỗi, hãy chuyển nó sang UTF-8 bằng một trong các cách khác rồi nhập bản đó.

LibreOffice Calc. Khi bạn mở file CSV, LibreOffice hiện hộp thoại nhập văn bản với danh sách Character set (bộ ký tự). Chọn Unicode (UTF-8), Cyrillic (Windows-1251) hoặc Western Europe (Windows-1252) và bản xem trước cập nhật ngay. Phần mềm này miễn phí, chạy trên Windows, macOS và Linux.

Trình soạn thảo văn bản. Các trình soạn thảo như Notepad trên Windows, TextEdit trên macOS hoặc trình soạn code như VS Code cho phép chọn bảng mã khi lưu. Điểm cần lưu ý: trình soạn thảo phải mở file bằng đúng bảng mã trước đã. Nếu chữ hiển thị đúng trong trình soạn thảo, hãy lưu thành UTF-8. Nếu chữ đã bị lỗi ngay trong đó, lưu lại chỉ giữ nguyên đống rác — hãy mở lại bằng đúng bảng mã trước.

Câu hỏi thường gặp

Có sửa được “????” trong file CSV không?

Thường là không. Dấu hỏi nghĩa là các ký tự đã bị thay thế khi ghi file, nên chữ gốc không còn trong file. Hãy xuất lại từ phần mềm kế toán hoặc ngân hàng, chọn UTF-8 nếu có thể.

Nên dùng bảng mã nào khi lưu hoặc xuất file?

UTF-8. Nó lưu được mọi bảng chữ cái, và mọi chương trình hiện đại đều hiểu. Nếu đồng nghiệp mở file bằng cách bấm đúp trong Excel, hãy dùng tùy chọn “CSV UTF-8” của Excel để file bắt đầu bằng BOM.

Đổi bảng mã có làm thay đổi số liệu không?

Không. Chữ số, dấu chấm và dấu phẩy giống nhau trong UTF-8, Windows-1251 và Windows-1252, nên số tiền và ngày tháng không bị ảnh hưởng. Chỉ những chữ nằm ngoài bảng chữ tiếng Anh cơ bản thay đổi.

Sửa file xuất từ ngân hàng bằng công cụ online có an toàn không?

Chỉ khi công cụ không tải file lên. Trình xem CSV giải mã và xuất file hoàn toàn trong trình duyệt, nên sao kê không bao giờ rời khỏi thiết bị của bạn.