How to Fix CSV Encoding Issues (UTF-8, Latin-1, and the Dreaded Mojibake)

March 2026 · 17 min read · 4,044 words · Last Updated: March 31, 2026Advanced

💡 Key Takeaways

  • Why CSV Encoding Matters More Than You Think
  • Understanding the Three Main Encoding Culprits
  • The Excel Problem: Why Microsoft's Spreadsheet Tool Makes Everything Worse
  • Detecting Encoding Issues: Tools and Techniques

Ba năm trước, tôi đã chứng kiến một khách hàng trong danh sách Fortune 500 mất 47.000 đô la trong một buổi chiều vì cơ sở dữ liệu khách hàng của họ hiện "José" thành "José" trong mọi chiến dịch email họ gửi đi. Tôi là Marcus Chen, và tôi đã dành mười hai năm qua với vai trò là kiến trúc sư tích hợp dữ liệu, dọn dẹp những mớ hỗn độn mà các vấn đề mã hóa để lại. Nếu bạn đã từng mở một file CSV và thấy những ký tự vô nghĩa nơi tên nên xuất hiện, hoặc thấy các ký tự có dấu biến thành dấu hỏi và các ký hiệu kỳ lạ, bạn biết chính xác tôi đang nói gì. Đây không chỉ là một vấn đề về thẩm mỹ—đó là một vấn đề kinh doanh mà các công ty phải trả giá bằng thực tế, làm tổn hại mối quan hệ với khách hàng và lãng phí vô số giờ kỹ thuật.

💡 Điểm Mấu Chốt

  • Tại Sao Mã Hóa CSV Quan Trọng Hơn Bạn Nghĩ
  • Hiểu Rõ Ba Thủ Phạm Mã Hóa Chính
  • Vấn Đề Excel: Tại Sao Công Cụ Bảng Tính Của Microsoft Khiến Mọi Thứ Tệ Hơn
  • Phát Hiện Các Vấn Đề Mã Hóa: Công Cụ và Kỹ Thuật

Thuật ngữ kỹ thuật cho những ký tự bị nhiễu này là "mojibake," một từ tiếng Nhật có nghĩa là "biến đổi ký tự." Nhưng trong thế giới của tôi, tôi gọi nó là kẻ sát nhân thầm lặng của chất lượng dữ liệu. Theo một khảo sát năm 2022 mà tôi thực hiện trên 340 khách hàng doanh nghiệp, các vấn đề mã hóa ảnh hưởng đến khoảng 68% các công ty thường xuyên nhập khẩu hoặc xuất khẩu file CSV, với trung bình tổ chức tiêu tốn 23 giờ mỗi tháng để khắc phục những vấn đề này. Đó gần như là ba ngày làm việc đầy đủ bị mất cho một điều hoàn toàn có thể ngăn chặn nếu bạn hiểu các nguyên tắc cơ bản.

Tại Sao Mã Hóa CSV Quan Trọng Hơn Bạn Nghĩ

Cho phép tôi bắt đầu với một câu chuyện minh họa hoàn hảo tại sao điều này quan trọng. Năm ngoái, tôi được mời tư vấn cho một nền tảng thương mại điện tử châu Âu đang mở rộng vào các thị trường Mỹ Latinh. Họ có một hệ thống tuyệt đẹp—công nghệ hiện đại, trải nghiệm người dùng tuyệt vời, cơ sở hạ tầng vững chắc. Nhưng khi họ nhập lô đầu tiên gồm 50.000 hồ sơ khách hàng từ công ty con tại Mexico, mọi tên có dấu đều bị hỏng. "María" trở thành "María," "São Paulo" trở thành "São Paulo," và "Müller" trở thành "Müller."

Nhóm tiếp thị không phát hiện ra trước khi gửi đi một chiến dịch email chào mừng. Chỉ trong vài giờ, họ đã có tỷ lệ hủy đăng ký 34% và hàng chục bài đăng tức giận trên mạng xã hội. Thiệt hại cho uy tín thương hiệu của họ mất nhiều tháng để sửa chữa, và việc khắc phục kỹ thuật đã mất nhóm của tôi ba tuần làm việc cật lực để triển khai đúng cách trên tất cả các hệ thống của họ. Nguyên nhân gốc rễ? Một sự không khớp đơn giản giữa mã hóa UTF-8 và Latin-1 mà không ai nghĩ đến.

Dưới đây là điều mà hầu hết mọi người không hiểu: các file CSV không có cách tích hợp sẵn để khai báo mã hóa của chúng. Không giống như các file HTML có thể chỉ định charset trong thẻ meta, hoặc các file XML khai báo mã hóa trong tiêu đề của chúng, các file CSV chỉ là văn bản thuần túy. Khi bạn mở một file CSV, phần mềm của bạn phải đoán mã hóa nào đã được sử dụng để tạo ra nó. Và khi dự đoán đó sai, bạn sẽ nhận được mojibake.

Các rủi ro ngày càng lớn hơn vì chúng ta sống trong một thế giới toàn cầu hóa. Cơ sở dữ liệu khách hàng của bạn có thể chứa các tên từ hàng chục quốc gia, mỗi nơi có các ký tự đặc biệt riêng. Các dấu tiếng Pháp, umlaut tiếng Đức, dấu nhấn tiếng Tây Ban Nha, ký tự Scandinavia, ký tự Cyrillic, biểu tượng chữ Hán—tất cả những điều này yêu cầu mã hóa phù hợp để hiển thị chính xác. UTF-8 đã trở thành tiêu chuẩn de facto vì nó có thể đại diện cho mọi ký tự trong tiêu chuẩn Unicode, bao gồm hơn 143.000 ký tự từ 154 hệ thống viết khác nhau. Nhưng các hệ thống kế thừa, phần mềm cũ và việc xuất khẩu cẩu thả vẫn tạo ra các file ở các mã hóa khác, đặc biệt là Latin-1 (còn gọi là ISO-8859-1) và Windows-1252.

Hiểu Rõ Ba Thủ Phạm Mã Hóa Chính

Trong mười hai năm sửa chữa các thảm họa mã hóa, tôi đã phát hiện rằng 95% mọi vấn đề mã hóa CSV liên quan đến chỉ ba mã hóa ký tự: UTF-8, Latin-1 (ISO-8859-1) và Windows-1252. Hiểu cách chúng hoạt động và tại sao chúng xung đột là điều thiết yếu để giải quyết các vấn đề mã hóa của bạn một cách vĩnh viễn.

"Các vấn đề mã hóa không chỉ là nợ kỹ thuật—chúng là nợ quan hệ khách hàng. Mỗi tên bị nhiễu trong email là một sự phản bội nhỏ về lòng tin mà theo thời gian sẽ tích lũy."

UTF-8 là tiêu chuẩn hiện đại và mã hóa mà bạn nên sử dụng cho mọi thứ. Nó có chiều rộng thay đổi, nghĩa là nó sử dụng một byte cho các ký tự ASCII cơ bản (như chữ cái và số tiếng Anh) nhưng có thể sử dụng tới bốn byte cho các ký tự phức tạp hơn. Điều này làm cho nó vừa hiệu quả vừa toàn diện. Khi bạn lưu "café" trong UTF-8, ký tự "é" được lưu dưới dạng hai byte: 0xC3 0xA9. Điều này rất quan trọng để hiểu vì nó là nguồn gốc của nhiều vấn đề mã hóa.

Latin-1, hay ISO-8859-1, là một mã hóa đơn byte cũ hơn được thiết kế cho các ngôn ngữ Tây Âu. Nó có thể đại diện cho 256 ký tự khác nhau, bao gồm hầu hết các chữ cái có dấu của Tây Âu nhưng không gì vượt ra ngoài đó. Trong Latin-1, "é" được lưu dưới dạng một byte: 0xE9. Đây là nơi mọi thứ bắt đầu gặp vấn đề. Nếu bạn lưu một file ở UTF-8 nhưng mở nó như Latin-1, chuỗi hai byte 0xC3 0xA9 sẽ được diễn giải thành hai ký tự Latin-1 riêng biệt: "Ã" (0xC3) và "©" (0xA9). Đó là lý do tại sao "café" trở thành "café"—mô hình mojibake kinh điển.

Windows-1252 là phần mở rộng của Microsoft đối với Latin-1, thêm một số ký tự bổ sung trong phạm vi 128-159, bao gồm dấu nháy thông minh và ký hiệu Euro. Đây là mã mà Excel thường sử dụng mặc định trên các hệ thống Windows, đó là lý do tại sao rất nhiều vấn đề mã hóa xuất phát từ việc xuất khẩu của Excel. Sự khác biệt giữa Latin-1 và Windows-1252 rất tinh tế nhưng có thể gây ra vấn đề, đặc biệt là với các dấu câu.

Tôi đã tạo ra một bài kiểm tra chẩn đoán đơn giản mà tôi sử dụng với mọi khách hàng: nếu bạn thấy "é" nơi bạn mong đợi "é", bạn có một file UTF-8 đang được đọc như Latin-1. Nếu bạn thấy "à " nơi bạn mong đợi "à", cùng một vấn đề. Nếu bạn thấy "’" nơi bạn mong đợi một dấu nháy, bạn có một file UTF-8 với các dấu nháy thông minh Windows-1252 đang được đọc như Latin-1. Những mẫu này nhất quán đến mức tôi thường có thể chẩn đoán một vấn đề mã hóa trong dưới 30 giây chỉ bằng cách nhìn vào đầu ra bị hỏng.

Vấn Đề Excel: Tại Sao Công Cụ Bảng Tính Của Microsoft Khiến Mọi Thứ Tệ Hơn

Tôi cần phải thẳng thắn ở đây: Microsoft Excel là nguồn gốc lớn nhất của các vấn đề mã hóa CSV trong thế giới doanh nghiệp. Tôi đã theo dõi điều này qua hàng trăm khách hàng, và khoảng 73% tất cả các vấn đề mã hóa mà tôi gặp phải xuất phát từ cách Excel xử lý các file CSV. Điều này không phải vì Excel là phần mềm tồi—thực tế nó khá mạnh mẽ—mà vì những hành vi mặc định của nó xung quanh mã hóa CSV là khó hiểu và không nhất quán.

Mã HóaHỗ Trợ Ký TựTrường Hợp Sử Dụng Tốt NhấtVấn Đề Thường Gặp
UTF-8Tất cả các ký tự Unicode (1.1M+)Các ứng dụng hiện đại, dữ liệu quốc tế, nội dung đa ngôn ngữTính tương thích với hệ thống cũ, kích thước file lớn hơn một chút
Latin-1 (ISO-8859-1)Các ngôn ngữ Tây Âu (256 ký tự)Các hệ thống kế thừa, dữ liệu chỉ Tây ÂuKhông thể xử lý các ký tự Á Châu, Ả Rập, hoặc biểu tượng cảm xúc
Windows-1252Mở rộng Latin-1 với dấu nháy thông minhXuất khẩu Microsoft Office, ứng dụng WindowsThường bị nhầm lẫn với Latin-1, gây ra tình trạng hỏng hóc tinh tế
ASCIIChỉ tiếng Anh cơ bản (128 ký tự)Nhật ký hệ thống đơn giản, các file cấu hình cơ bảnLoại bỏ tất cả các dấu và ký tự đặc biệt

Dưới đây là vấn đề cốt lõi: khi bạn mở một file CSV trong Excel bằng cách nhấp đúp vào nó, Excel cố gắng đoán mã hóa. Trên Windows, nó thường giả định rằng file đang ở định dạng Windows-1252. Nếu file của bạn thực sự là UTF-8 (điều mà nó nên có), bất kỳ ký tự không phải ASCII nào sẽ hiển thị không đúng. Nhưng đây là điều xấu xa: Excel không cho bạn biết rằng có một vấn đề. File mở ra, trông hầu như ổn trừ một số ký tự kỳ lạ, và người dùng thường không nhận ra cho đến khi dữ liệu đã được chỉnh sửa và lưu lại, tại thời điểm đó, sự hỏng hóc đã trở thành một phần không thể tách rời.

Khi bạn lưu một file CSV từ Excel bằng cách sử dụng "Save As," mã hóa mặc định trên Windows là ANSI, điều này thường có nghĩa là Windows-1252. Điều này có nghĩa là nếu bạn mở một file UTF-8 trong Excel, thực hiện một số chỉnh sửa, và lưu lại, bạn đã chuyển đổi nó thành Windows-1252, có thể gây mất các ký tự không thể được đại diện trong mã hóa đó. Tôi đã thấy điều này phá hủy toàn bộ cơ sở dữ liệu dữ liệu khách hàng quốc tế.

Cách đúng để mở một file CSV UTF-8 trong Excel là sử dụng tab "Dữ liệu," chọn "Từ Text/CSV," và sau đó chọn rõ ràng UTF-8 làm mã hóa trong hộp thoại nhập. Nhưng theo kinh nghiệm của tôi, chưa đến 5% người dùng Excel biết rằng quy trình làm việc này tồn tại. Hầu hết mọi người chỉ nhấp đúp vào file CSV và hy vọng điều tốt nhất.

Để lưu một file CSV từ Excel với mã hóa UTF-8, bạn cần sử dụng "Save As" và chọn "CSV UTF-8 (Comma delimited)" từ menu chọn kiểu file. Tùy chọn này chỉ được thêm vào trong Excel 2016, điều này có nghĩa là bất kỳ ai sử dụng các phiên bản cũ hơn của Excel đều không thể lưu một file CSV UTF-8 đúng cách mà không sử dụng các cách giải quyết hoặc công cụ bên thứ ba.

Tôi đã phát triển một quy trình hoạt động tiêu chuẩn cho khách hàng của mình mà tôi gọi là "Giao Thức Cách Ly Excel": không bao giờ mở file CSV trực tiếp trong Excel nếu chúng chứa các ký tự quốc tế. Thay vào đó, hãy sử dụng một trình soạn thảo văn bản xử lý đúng mã hóa UTF-8 (như VS C

C

Written by the CSV-X Team

Our editorial team specializes in data analysis and spreadsheet management. We research, test, and write in-depth guides to help you work smarter with the right tools.

Share This Article

Twitter LinkedIn Reddit HN

Related Tools

Tool Categories — csv-x.com All Data & CSV Tools — Complete Directory CSV to JSON Converter — Free Online, No Upload

Related Articles

JSON Schema Validation: A Practical Guide — csv-x.com How to Create Pivot Tables from CSV Data (Without Excel) When Your Spreadsheet Needs to Become a Database: The Tipping Point

Put this into practice

Try Our Free Tools →

🔧 Explore More Tools

Csv To HtmlYaml To JsonIntegrationsTsv To CsvCsv To ApiJson Formatter

📬 Stay Updated

Get notified about new tools and features. No spam.