Mọi thứ bạn chưa bao giờ muốn biết về Chuẩn hóa Unicode
Chuẩn hóa Canonical
Unicode bao gồm nhiều cách để mã hóa một số ký tự, đáng chú ý nhất là các ký tự có dấu. Chuẩn hóa Canonical thay đổi các điểm mã thành một dạng mã hóa chính tắc. Các điểm mã kết quả sẽ xuất hiện giống hệt với các điểm ban đầu chặn mọi lỗi trong phông chữ hoặc công cụ kết xuất.
Khi nào nên sử dụng
Vì các kết quả có vẻ giống nhau, nên luôn an toàn khi áp dụng chuẩn hóa chính tắc cho chuỗi trước khi lưu trữ hoặc hiển thị chuỗi đó, miễn là bạn có thể chịu đựng được kết quả không bị bit giống với đầu vào.
Chuẩn hóa Canonical có hai dạng: NFD và NFC. Hai là tương đương theo nghĩa là người ta có thể chuyển đổi giữa hai hình thức này mà không mất. So sánh hai chuỗi dưới NFC sẽ luôn cho kết quả giống như so sánh chúng dưới NFD.
NST
NFD có các nhân vật được mở rộng hoàn toàn. Đây là hình thức chuẩn hóa nhanh hơn để tính toán, nhưng kết quả là có nhiều điểm mã hơn (nghĩa là sử dụng nhiều không gian hơn).
Nếu bạn chỉ muốn so sánh hai chuỗi chưa được chuẩn hóa, thì đây là hình thức chuẩn hóa ưa thích trừ khi bạn biết bạn cần chuẩn hóa tương thích.
NFC
NFC kết hợp lại các điểm mã khi có thể sau khi chạy thuật toán NFD. Điều này mất nhiều thời gian hơn một chút, nhưng kết quả là chuỗi ngắn hơn.
Chuẩn hóa tương thích
Unicode cũng bao gồm nhiều ký tự không thực sự thuộc về nhưng được sử dụng trong các bộ ký tự cũ. Unicode đã thêm những thứ này để cho phép văn bản trong các bộ ký tự đó được xử lý dưới dạng Unicode, và sau đó được chuyển đổi lại mà không bị mất.
Chuẩn hóa tương thích chuyển đổi các chuỗi này thành chuỗi ký tự "thực" tương ứng và cũng thực hiện chuẩn hóa chính tắc. Các kết quả của chuẩn hóa tương thích có thể không xuất hiện giống hệt với bản gốc.
Các ký tự bao gồm thông tin định dạng được thay thế bằng các ký tự không. Ví dụ, nhân vật ⁹
được chuyển đổi thành 9
. Những người khác không liên quan đến sự khác biệt định dạng. Ví dụ, ký tự chữ số La Mã Ⅸ
được chuyển đổi thành các chữ cái thông thường IX
.
Rõ ràng, một khi chuyển đổi này đã được thực hiện, không còn có thể chuyển đổi một cách dễ dàng trở lại bộ ký tự gốc.
Khi nào sử dụng
Unicode Consortium cho thấy suy nghĩ về chuẩn hóa tương thích giống như một ToUpperCase
biến đổi. Nó là một cái gì đó có thể hữu ích trong một số trường hợp, nhưng bạn không nên chỉ áp dụng nó willy-nilly.
Một trường hợp sử dụng tuyệt vời sẽ là một công cụ tìm kiếm vì bạn có thể muốn tìm kiếm cho 9
phù hợp ⁹
.
Một điều có lẽ bạn không nên làm là hiển thị kết quả của việc áp dụng chuẩn hóa tương thích cho người dùng.
NFKC / NFKD
Hình thức chuẩn hóa tương thích có hai dạng NFKD và NFKC. Chúng có cùng mối quan hệ như giữa NFD và C.
Bất kỳ chuỗi nào trong NFKC vốn dĩ cũng có trong NFC, và tương tự đối với NFKD và NFD. Do đó NFKD(x)=NFD(NFKC(x))
, và NFKC(x)=NFC(NFKD(x))
, v.v.
Phần kết luận
Nếu nghi ngờ, hãy đi với chuẩn hóa chính tắc. Chọn NFC hoặc NFD dựa trên sự đánh đổi không gian / tốc độ áp dụng, hoặc dựa trên những gì được yêu cầu bởi thứ gì đó mà bạn đang hoạt động cùng.