Tình huống
Hãy tưởng tượng bạn mở một bản sao lưu SQL từ 10 năm trước hoặc một file CSV xuất từ phiên bản Excel cũ. Thay vì mã nguồn sạch sẽ, bạn lại thấy một loạt các ký hiệu `` hoặc các chuỗi ký tự lạ như é. Đôi khi, VS Code thậm chí không thử hiển thị văn bản mà chỉ hiện một thanh thông báo cho rằng tệp đó là tệp nhị phân (binary).
File seems to be binary or uses an unsupported text encoding. Please open it with the 'reopen with encoding' command.
Nguyên nhân gốc rễ là do sự không tương thích đơn giản. VS Code mặc định sử dụng UTF-8, tiêu chuẩn cho hơn 95% trang web hiện nay. Tuy nhiên, tệp của bạn có thể đang dùng Windows-1252, Shift-JIS, hoặc UTF-16. Khi trình soạn thảo không thể khớp các byte thô đó với UTF-8, nó giả định bạn đang cố đọc một hình ảnh hoặc tệp PDF và ngừng xử lý.
Sửa nhanh: Mở lại với mã hóa chính xác
Bạn cần đọc tệp ngay lập tức? Bạn có thể chỉ định thủ công cho VS Code biết "từ điển" nào cần dùng để dịch các byte đó. Hãy làm theo các bước sau:
- Kiểm tra Thanh trạng thái (Status Bar) ở góc dưới bên phải cửa sổ. Tìm dòng chữ ghi "UTF-8" hoặc "Binary".
- Nhấp vào dòng chữ đó để mở bảng lệnh (command palette).
- Chọn "Reopen with Encoding" từ danh sách thả xuống.
- VS Code sẽ liệt kê một vài tùy chọn. Nếu bạn đang xử lý tệp Windows cũ, Windows-1252 thường sẽ hiệu quả. Đối với các tệp từ hệ thống Đông Á, hãy thử Shift-JIS hoặc EUC-JP.
- Văn bản sẽ ngay lập tức trở nên dễ đọc. Nếu nó vẫn trông như bị lỗi font, hãy lặp lại quy trình và chọn "Guess from content."
Sửa triệt để: Chuyển đổi tệp sang UTF-8
Mở được tệp mới chỉ là một nửa chặng đường. Để tránh lỗi này gây rắc rối cho đồng nghiệp, hãy chuyển đổi tệp sang UTF-8 vĩnh viễn. Đây là tiêu chuẩn công nghiệp cho các hệ thống quản lý phiên bản hiện đại như Git.
- Tìm lại tên mã hóa trong Thanh trạng thái (lúc này nó sẽ hiển thị mã bạn vừa chọn, ví dụ "Windows-1252").
- Nhấp vào đó và lần này chọn "Save with Encoding".
- Chọn UTF-8 từ danh sách.
- Nhấn
Ctrl + S(hoặcCmd + Strên Mac) để lưu thay đổi.
Tệp của bạn giờ đã được hiện đại hóa. Các lập trình viên sau này sẽ không cần phải đoán mã hóa khi họ tải mã nguồn của bạn về.
Tự động hóa việc phát hiện mã hóa
Việc chuyển đổi mã hóa thủ công rất tẻ nhạt nếu bạn phải xử lý dữ liệu cũ hàng ngày. Bạn có thể yêu cầu VS Code tự thực hiện công việc nặng nhọc này bằng cách bật tính năng tự động dự đoán. Nó sẽ phân tích các mẫu byte để chọn bảng mã có khả năng nhất.
- Nhấn
Ctrl + ,(hoặcCmd + ,) để mở Cài đặt (Settings). - Tìm kiếm
files.autoGuessEncoding. - Tích vào ô để kích hoạt.
Lưu ý rằng việc này sẽ làm tăng một chút thời gian xử lý khi mở các tệp dung lượng lớn. Với hầu hết người dùng, sự tiện lợi này xứng đáng hơn vài mili giây trễ đó.
Xử lý các chuỗi đã được mã hóa
Đôi khi bản thân tệp là UTF-8, nhưng nội dung lại bị che giấu có chủ đích. Điều này thường thấy trong nhật ký API hoặc các tệp JSON chứa dữ liệu Base64. Nếu bạn thấy một chuỗi như SGVsbG8gV29ybGQ=, việc thay đổi mã hóa tệp sẽ không giúp ích gì.
Trong những trường hợp này, tôi sử dụng Base64 Decoder của ToolCraft. Nó giúp bạn nhanh chóng giải mã các chuỗi để xem dữ liệu thực tế bên dưới. Đây là lựa chọn an toàn hơn các trình chuyển đổi trực tuyến ngẫu nhiên vì nó xử lý các chuỗi nhạy cảm mà không lưu nhật ký phía máy chủ.
Xác minh: Cách kiểm tra xem đã sửa thành công chưa
Đừng cho rằng lỗi đã được sửa chỉ vì nó trông ổn trên màn hình. Hãy thực hiện các bước kiểm tra nhanh sau:
- Kiểm tra Thanh trạng thái: Đảm bảo nó hiển thị rõ ràng "UTF-8".
- Kiểm tra tải lại: Đóng tab và mở lại. Tệp sẽ mở ngay lập tức mà không có cảnh báo "binary".
- Git Diff: Chạy lệnh
git difftrong terminal của bạn. Bạn sẽ thấy các ký tự bị lỗi được thay thế bằng các ký tự đúng. Lưu ý rằng việc thay đổi toàn bộ mã hóa có thể đánh dấu mọi dòng trong tệp là "đã sửa đổi".
Bảng tra cứu nhanh các mã hóa phổ biến
Nguồn tài liệu
Mã hóa khả thi
CSV từ Windows/Excel cũ
Windows-1252
Tệp văn bản Linux/Unix cũ
ISO-8859-1
Hệ thống cũ của Nhật Bản
Shift-JIS
Mã nguồn hiện đại tiêu chuẩn
UTF-8

