Hệ Thống Unicode (Unicode System)
Unicode là gì?
↳ Unicode là một chuẩn mã hóa ký tự được sử dụng rộng rãi trong ngành công nghệ máy tính. Mục tiêu của Unicode là cung cấp một cách thức thống nhất và duy nhất để biểu diễn các ký tự từ tất cả các ngôn ngữ viết trên thế giới.
↳ Unicode sử dụng hệ thập lục phân (hexadecimal) để biểu thị các ký tự. Ví dụ, giá trị 0x0041 tương ứng với ký tự Latin A.
↳ Lý do ban đầu cho việc sử dụng 16 bit để mã hóa ký tự trong Unicode là vì các máy tính thời điểm đó chủ yếu là máy tính 16 bit.
Unicode và Java
↳ Khi ngôn ngữ lập trình Java được phát triển, chuẩn Unicode đã được chấp nhận và kiểu dữ liệu char được định nghĩa là kiểu 16 bit, có thể lưu trữ các ký tự trong phạm vi từ 0x0000 đến 0xFFFF.
↳ Tuy nhiên, mã hóa 16 bit chỉ hỗ trợ tối đa 2^16 (65,536) ký tự, không đủ để chứa tất cả các ký tự trên thế giới. Do đó, chuẩn Unicode đã được mở rộng lên 0x10FFFF, hỗ trợ hơn một triệu ký tự.
↳ Vấn đề đặt ra là không thể thay đổi định nghĩa của một ký tự trong Java từ 16 bit sang 32 bit vì điều này sẽ khiến hàng triệu ứng dụng Java hiện có không còn hoạt động bình thường.
Thuật ngữ trong Unicode
↳ Ký tự (character): Là đơn vị nhỏ nhất của văn bản, mang ý nghĩa ngữ nghĩa. Ví dụ: a, b, c, $, €, こんにちは (konnichiwa).
↳ Bộ ký tự (character set): Là tập hợp các ký tự có thể được sử dụng bởi nhiều ngôn ngữ. Ví dụ: Bộ ký tự Latin được sử dụng bởi tiếng Anh và hầu hết các ngôn ngữ châu Âu, trong khi bộ ký tự Hy Lạp chỉ được sử dụng bởi tiếng Hy Lạp.
↳ Bộ ký tự mã hóa (coded character set): Là bộ ký tự trong đó mỗi ký tự được gán một số duy nhất.
↳ Điểm mã (code point): Là giá trị được sử dụng trong bộ ký tự mã hóa. Một điểm mã là kiểu dữ liệu int 32 bit, trong đó 21 bit thấp hơn biểu thị giá trị điểm mã hợp lệ và 11 bit cao hơn bằng 0.
↳ Đơn vị mã Unicode (Unicode code unit): Là giá trị char 16 bit. Ví dụ: Chuỗi "abc" tiếp theo bởi ký tự Deseret LONG I (ký tự này được biểu diễn bằng hai giá trị char). Chuỗi đó chứa bốn ký tự, bốn điểm mã nhưng có tới năm đơn vị mã.
↳ Ký hiệu Hexa (hexadecimal): Để biểu diễn một ký tự trong Unicode, giá trị hexa được thêm tiền tố U+.
↳ Phạm vi điểm mã Unicode hợp lệ: Là từ U+0000 đến U+10FFFF. Giá trị điểm mã cho ký tự Latin A là U+0041. Ký tự € (đại diện cho đơn vị tiền tệ Euro) có giá trị điểm mã U+20AC. Ký tự đầu tiên trong bảng chữ cái Deseret, LONG I, có giá trị điểm mã U+10400.
Bảng dưới đây hiển thị giá trị điểm mã cho một số ký tự:
Ký tự | Điểm mã Unicode | Hình tượng |
---|---|---|
Latin A | U+0041 | A |
Latin ß (sharp S) | U+00DF | ß |
Hán tự Đông (Đông) | U+6771 | 東 |
Deseret, LONG I | U+10400 | 𐐀 |
↳ Ký tự bổ sung (supplementary character): Là ký tự nằm trong phạm vi từ U+10000 đến U+10FFFF.
↳ Mặt phẳng đa ngôn ngữ cơ bản (Basic Multilingual Plane - BMP): Là tập các ký tự từ U+0000 đến U+FFFF.
Tiềm hiểu rõ hơn về hệ thống Unicode trong Java:Tại đây