Tìm hiểu Unicode
Is Unicode a 16-bit encoding? Nếu câu trả lời bạn chọn là Đúng, xin chúc mừng, bạn đã sai, đừng buồn vì ít ra bạn đã có một đồng chí là mình =)) Một điều mà nhiều người đến nay vẫn nhầm tưởng là Unicode sử dụng 16 bit để mã hóa, bởi vậy nó chỉ có thể mã hóa tối đa 65536 ký tự. Điều này hoàn ...
Is Unicode a 16-bit encoding?
Nếu câu trả lời bạn chọn là Đúng, xin chúc mừng, bạn đã sai, đừng buồn vì ít ra bạn đã có một đồng chí là mình =))
Một điều mà nhiều người đến nay vẫn nhầm tưởng là Unicode sử dụng 16 bit để mã hóa, bởi vậy nó chỉ có thể mã hóa tối đa 65536 ký tự. Điều này hoàn toàn không chính xác.
Thực ra, phiên bản đầu tiên của Unicode đúng là sử dụng 16 bit để mã hóa, từ năm 1991 đến 1995. Nhưng từ khi Unicode 2.0 ra đời (06/1996), nó không còn sử dụng chỉ 16 bit để mã hóa nữa. Chuẩn Unicode mã hóa ký tự trong dải từ U+0000 đến U+10FFFF, tức là bao gồm không gian mã khoảng 21 bit. Tùy vào phương thức mã hóa được sử dụng (UTF-8, UTF-16, UTF-32), mỗi ký tự sẽ được biểu diễn bởi một chuỗi từ 1-4 đơn vị mã 8 bit (tương đương 1-4 byte), từ 1-2 đơn vị mã 16 bit, hoặc chỉ một đơn vị mã 32 bit duy nhất.
Trước khi Unicode ra đời, thế giới đã tồn tại hàng trăm hệ mã hóa, tuy nhiên lại chưa có bất kỳ hệ nào lưu trữ được đầy đủ mọi ký tự. Nổi bật nhất chắc có lẽ là ASCII, bảng mã dựa trên chữ cái Latin được dùng trong tiếng Anh hiện đại.
Chính xác thì ASCII dùng 7 bit biểu diễn với 7 số nhị phân (thập phân từ 0 đến 127). Từ 32 đến 127 là những ký tự in được, tức là hiển thị được, ví dụ ' ' là 32, chữ cái 'A' là 65. Mã dưới 32 được dùng để biểu diễn ký tự điều khiển (control character), ví dụ như nút ESC, Backspace.
Rõ ràng chỉ với 7, thậm chi là 8 bit, bạn chỉ biểu diễn được tối đa 256 ký tự, từng đó quá đủ với tiếng Anh, nhưng với ngôn ngữ khác thì không thể. Vậy các hệ mã hóa khác thì sao? Những hệ mã hóa này lại xung đột với nhau. Ví dụ cả hai đều cùng sử dụng một số để biểu diễn hai ký tự khác biệt, hoặc lại dùng hai số khác nhau để biểu diễn cùng một ký tự. Mỗi một máy tính đều hỗ trợ nhiều chuẩn mã hóa, chính vì vậy mà mỗi khi dữ liệu được trao đổi giữa các chuẩn mã hóa thì nguy cơ sai lệch luôn tồn tại.
Unicode ra đời để giải quyết vấn đề này. Nó cung cấp một biểu diễn số duy nhất cho mỗi một ký tự, mà không cần quan tâm đến nền tảng, chương trình hay ngôn ngữ là gì. Chuẩn Unicode (Unicode Standard) cung cấp một phương thức nhất quán để mã hóa toàn bộ ngôn ngữ viết trên thế giới. Để mã ký tự trông đơn giản và hiệu quả, nó sẽ gán một ký tự với một số duy nhất. Chuẩn Unicode hỗ trợ 3 hình thức mã hóa như mình đã nói ở trên, bao gồm UTF-8, UTF-16 và UTF-32, mã hóa cùng một bộ ký tự, dĩ nhiên.