1. Hệ thống Unicode trong Java là gì?
Unicode là một kiểu mã hóa ký tự chuẩn quốc tế. Unicode được sử dụng trong hầu hết các ngôn ngữ văn bản điện tử của thế giới.
Để máy tính có thể lưu trữ văn bản và số mà con người có thể hiểu, cần phải có một mã biến đổi ký tự thành số. Tiêu chuẩn Unicode định nghĩa mã như vậy bằng cách sử dụng mã hóa ký tự. Lý do mã hóa ký tự là rất quan trọng để mọi thiết bị có thể hiển thị cùng một thông tin. Một chương trình mã hóa ký tự tùy chỉnh có thể hoạt động tốt trên một máy tính nhưng các vấn đề sẽ xảy ra khi bạn gửi cùng một văn bản đó cho người khác. Nó sẽ không biết những gì bạn đang nói về, trừ khi nó hiểu được các chương trình mã hóa quá.
2. Tại sao Java lại sử dụng hệ thống Unicode?
Trước đây, khi chưa có Unicode đã có nhiều tiêu chuẩn ngôn ngữ khác được sử dụng như:
- ASCII (American Standard Code for Information Interchange) được sử dụng ở Hoa Kỳ
- ISO 8859-1 được sử dụng ở Tây Âu
- KOI-8 được sử dụng ở Nga
- GB18030 and BIG-5
Vì có nhiều tiêu chuẩn khác nhau như vậy và sự khác biệt ngôn ngữ đã có một số vấn đề xảy ra:
- Một giá trị mã cụ thể tương ứng với ký tự khác nhau trong các tiêu chuẩn ngôn ngữ khác nhau.
- Các kiểu mã hóa cho các ngôn ngữ với tập các ký tự lớn có biến length. Nhiều ký tự thông dụng được mã hóa thành 1 byte, những ký tự khác yêu cầu 2 hoặc nhiều byte.
Vì vậy mà Unicode ra đời để giải quyết một số vấn đề gặp phải. Với Unicode, mỗi ký tự chiếm 2 byte. Vì thế Java cũng sử dụng 2 byte cho mỗi ký tự
- Giá trị nhỏ nhất: \u0000
- Giá trị lớn nhất: \uFFFF
Ngày này, tiêu chuẩn Unicode xác định các giá trị cho hơn 128.000 ký tự, và có thể được nhìn thấy tại Unicode Consortium . Nó có một số dạng mã hóa ký tự:
- UTF-8 : Chỉ sử dụng một byte (8 bit) để mã hóa các ký tự tiếng Anh. Nó có thể sử dụng một chuỗi các byte để mã hóa các ký tự khác. UTF-8 được sử dụng rộng rãi trong các hệ thống email và trên internet.
- UTF-16 : Sử dụng hai byte (16 bit) để mã hóa các ký tự thường được sử dụng nhất. Nếu cần, các ký tự bổ sung có thể được biểu diễn bằng một cặp số 16 bit.
- UTF-32 : Sử dụng bốn byte (32 bit) để mã hóa các ký tự. Rõ ràng là khi chuẩn Unicode tăng lên, một số 16 bit quá nhỏ để thể hiện tất cả các ký tự. UTF-32 có khả năng biểu diễn mọi ký tự Unicode dưới dạng một số.
Lưu ý
UTF có nghĩa là Đơn vị chuyển đổi Unicode.
3. Các điểm mã và đơn vị mã
3.1. Điểm mã
Điểm mã là giá trị mà ký tự được đưa ra trong tiêu chuẩn Unicode. Các giá trị theo Unicode được viết dưới dạng số thập lục phân và có tiền tố là U + .
Ví dụ để mã hóa các ký tự đã xem trước đó:
- A là U + 0041
- a là U + 0061
- 1 là U + 0031
- # là U + 0023
Các điểm mã này được chia thành 17 phần khác nhau được gọi là mặt phẳng, được xác định bằng các số từ 0 đến 16. Mỗi mặt phẳng chứa 65.536 điểm mã. Mặt phẳng đầu tiên, 0, giữ các ký tự được sử dụng phổ biến nhất, và được gọi là Máy chủ đa ngôn ngữ cơ bản (BMP).
3.2. Đơn vị mã
Lược đồ mã hóa được tạo thành từ các đơn vị mã, được sử dụng để cung cấp chỉ mục cho vị trí của một ký tự trên mặt phẳng.
Ví dụ như UTF-16 . Mỗi số 16 bit là một đơn vị mã. Các đơn vị mã có thể được chuyển đổi thành các điểm mã. Ví dụ, biểu tượng ghi chú phẳng ♭ có một điểm mã của U + 1D160 và sống trên mặt phẳng thứ hai của chuẩn Unicode (Máy bay bổ sung Ideographic). Nó sẽ được mã hóa bằng cách kết hợp các đơn vị mã 16 bit U + D834 và U + DD60.
Đối với BMP, giá trị của các điểm mã và các đơn vị mã là giống hệt nhau. Điều này cho phép một phím tắt cho UTF-16 tiết kiệm rất nhiều không gian lưu trữ. Nó chỉ cần sử dụng một số 16 bit để biểu diễn các ký tự đó.