Phân Biệt Một Chuỗi Chứa Ký Tự Tiếng Trung Là UTF-8 Hay GBK - nói dối e blog

Phân Biệt Một Chuỗi Chứa Ký Tự Tiếng Trung Là UTF-8 Hay GBK

Để phân biệt giữa chuỗi chứa chữ Hán sử dụng mã hóa UTF-8 hay GBK, hôm nay khi kiểm tra kho lưu trữ SVN, tôi phát hiện một bạn nữa chưa tuân thủ quy định nộp mã nguồn chứa chữ Hán. Quy tắc chung của chúng tôi yêu cầu tất cả các ký tự tiếng Hán trong mã nguồn đều phải được mã hóa dưới định dạng UTF-8, tuyệt đối không dùng GBK.

Việc kiểm tra thủ công như hiện tại không phải là giải pháp bền vững. Do đó, tôi quyết định xây dựng một hook trong SVN để tự động kiểm tra trước khi commit. Chỉ cần thêm một dòng script kiểm tra vào file hooks/pre-commit.teml trong kho là đủ.

Ban đầu tôi nghĩ đến việc sử dụng biểu thức chính quy (regular expression), nhưng sau khi phân tích thì thấy rằng tập hợp ký tự của UTF-8 và GBK có sự trùng lặp, khiến việc nhận diện trở nên phức tạp. Tôi thử tìm kiếm trên Google và phát hiện đã có người phát triển các biểu thức chính quy chuyên biệt cho từng loại mã hóa.

Tiếp tục tìm hiểu, tôi tìm thấy bài viết có yêu cầu tương tự của Mạnh Nham. Đọc phần nội dung chính thấy không đáng tin cậy, nhưng phần bình luận lại đưa ra phương pháp khả thi. Khi tập trung quan sát kỹ, tôi nhận ra người viết chính là mình, với bình luận đã để lại ba năm trước trên blog của tác giả này -_-.

Cuối cùng, tôi quyết định tự viết một chương trình nhỏ để kiểm tra mã hóa, thay vì dùng công cụ có sẵn. Thuật toán cụ thể như sau:

0%