Trả lời nhanh
Cần xây dựng bảng mã Unicode vì các bảng mã cũ (như ASCII) chỉ chứa được ít ký tự và mỗi nước, mỗi hãng lại dùng một bảng mã riêng, khiến cùng một mã hiển thị ra ký tự khác nhau. Unicode gán cho mỗi ký tự của hầu hết ngôn ngữ trên thế giới một mã duy nhất, giúp lưu trữ, hiển thị và trao đổi văn bản thống nhất, không còn lỗi font.
Trước khi có Unicode: chuyện gì đã xảy ra?
Máy tính chỉ hiểu số, nên mỗi ký tự phải được “đánh số” theo một bảng mã. Bảng mã ASCII phổ biến nhất dùng 7 bit, biểu diễn được 128 ký tự: chữ cái Latin không dấu, chữ số, dấu câu và một số ký tự điều khiển. Bảng này đủ cho tiếng Anh nhưng không có chỗ cho chữ cái có dấu như ắ, ề, ở hay chữ đ.
Để khắc phục, người ta mở rộng lên 8 bit (256 mã), dành 128 mã phía sau cho ký tự riêng của từng ngôn ngữ. Vấn đề là mỗi quốc gia, mỗi hãng phần mềm lại “lấp” 128 chỗ trống đó theo cách riêng.
Những bất cập dẫn đến nhu cầu Unicode
- Không đủ chỗ: 256 mã không thể chứa chữ Hán, chữ Hàn, chữ Ả Rập, chữ Thái… cùng lúc. Tiếng Việt có 134 chữ cái có dấu (tính cả hoa và thường) nên rất chật chội.
- Nhiều bảng mã xung đột: ở Việt Nam từng tồn tại TCVN3 (ABC), VNI, Windows-1258… Cùng một mã số nhưng mỗi bảng gán cho một ký tự khác nhau.
- Lỗi font khi trao đổi dữ liệu: soạn văn bản bằng bảng mã này, máy khác dùng bảng mã kia thì chữ biến thành ký tự lạ, hoặc phải cài đúng bộ font mới đọc được.
- Khó trộn nhiều ngôn ngữ: một tài liệu vừa có tiếng Việt, tiếng Nhật, tiếng Nga gần như không thể thực hiện bằng các bảng mã 8 bit.
- Khó phát triển phần mềm quốc tế: lập trình viên phải viết nhiều phiên bản cho nhiều bảng mã, rất tốn công và dễ lỗi.
Unicode giải quyết như thế nào?
Unicode là bộ mã chuẩn quốc tế, ý tưởng cốt lõi rất đơn giản: mỗi ký tự trên thế giới có đúng một số hiệu (gọi là điểm mã – code point), không trùng với ký tự nào khác. Điểm mã thường viết dạng U+ cùng số thập lục phân.
- Chữ A: U+0041 (trùng với mã ASCII 65, vì 41 hệ 16 = 65 hệ 10).
- Chữ đ: U+0111; chữ Đ: U+0110.
- Chữ ệ: U+1EC7; chữ ế: U+1EBF.
Bộ Unicode hiện chứa hơn 140 nghìn ký tự thuộc hàng trăm hệ chữ viết, cùng ký hiệu toán học, tiền tệ, biểu tượng cảm xúc (emoji)… và vẫn tiếp tục được bổ sung.
Unicode lưu vào máy tính ra sao: UTF-8, UTF-16, UTF-32
Điểm mã chỉ là con số; để lưu trong tệp, người ta dùng các “kiểu mã hoá”. Phổ biến nhất là UTF-8, dùng từ 1 đến 4 byte cho mỗi ký tự.
| Ký tự | Điểm mã | UTF-8 (hệ 16) | Số byte |
|---|---|---|---|
| A | U+0041 | 41 | 1 |
| đ | U+0111 | C4 91 | 2 |
| ệ | U+1EC7 | E1 BB 87 | 3 |
Nhờ UTF-8, văn bản tiếng Anh vẫn chỉ tốn 1 byte mỗi ký tự và tương thích ngược với ASCII, trong khi chữ có dấu vẫn được lưu đầy đủ. Đó là lý do hầu hết trang web và hệ điều hành ngày nay dùng UTF-8.
So sánh nhanh: bảng mã cũ và Unicode
| Tiêu chí | ASCII / bảng mã 8 bit | Unicode |
|---|---|---|
| Số ký tự | 128 hoặc 256 | Hơn 140 nghìn |
| Phạm vi ngôn ngữ | Một vài ngôn ngữ | Hầu hết ngôn ngữ |
| Tính thống nhất | Mỗi nước, mỗi hãng một kiểu | Một chuẩn quốc tế |
| Lỗi font | Thường gặp | Hầu như không còn |
| Trộn nhiều ngôn ngữ | Rất khó | Dễ dàng |
Cách trình bày câu trả lời khi làm bài
Nếu đề yêu cầu nêu lý do, em có thể viết theo ba ý ngắn gọn:
- Bảng mã cũ (ASCII, 8 bit) có quá ít ký tự, không đáp ứng được nhiều ngôn ngữ, trong đó có tiếng Việt.
- Nhiều bảng mã khác nhau gây xung đột, dẫn đến lỗi font khi trao đổi dữ liệu.
- Unicode mã hoá thống nhất mọi ký tự bằng mã duy nhất, nên dùng chung được trên mọi thiết bị, phần mềm, ngôn ngữ.
Lỗi sai thường gặp
- Nhầm “Unicode” với “font Unicode”. Unicode là bảng mã; font là kiểu hiển thị hình dạng chữ. Font Times New Roman, Arial… đều có thể hiển thị tiếng Việt Unicode.
- Nhầm Unicode với UTF-8. Unicode là bộ mã (gán số cho ký tự); UTF-8 là cách lưu các số đó thành byte.
- Cho rằng Unicode chỉ dùng 16 bit. Điểm mã Unicode vượt quá 16 bit, nên mới có UTF-8 dùng tới 4 byte.
Bài luyện tập
Bài 1. Vì sao một văn bản soạn bằng bảng mã TCVN3 khi mở trên máy không cài bộ font tương ứng lại hiện ký tự lạ?
Đáp án: Vì TCVN3 gán mã cho ký tự khác với bảng mã mà máy đang dùng; máy đọc cùng một con số nhưng hiểu thành ký tự khác. Unicode tránh được điều này vì mỗi ký tự có một mã duy nhất.
Bài 2. Ký tự A có điểm mã U+0041. Đổi sang hệ thập phân.
Đáp án: 41 (hệ 16) = 4×16 + 1 = 65.
Bài 3. Chuỗi “Việt” (chữ ệ viết dạng một ký tự dựng sẵn) khi lưu bằng UTF-8 cần bao nhiêu byte?
Đáp án: V, i, t mỗi chữ 1 byte; ệ cần 3 byte. Tổng: 1 + 1 + 3 + 1 = 6 byte.
Ghi nhớ
Mẹo nhớ: “Một ký tự – một mã – mọi nơi cùng đọc”. Unicode ra đời để chấm dứt tình trạng “mỗi nơi một bảng mã”, giúp văn bản tiếng Việt và mọi ngôn ngữ khác hiển thị đúng trên mọi thiết bị.
Câu hỏi thường gặp
Unicode là gì?
Unicode là bộ mã chuẩn quốc tế gán cho mỗi ký tự của hầu hết ngôn ngữ một số hiệu duy nhất (điểm mã), giúp máy tính lưu trữ và hiển thị văn bản thống nhất.
Unicode có khác gì ASCII?
ASCII chỉ có 128 ký tự, chủ yếu cho tiếng Anh. Unicode chứa hơn 140 nghìn ký tự của nhiều ngôn ngữ và vẫn giữ nguyên 128 mã đầu trùng với ASCII.
Có phải Unicode giúp hết lỗi font tiếng Việt?
Phần lớn là đúng. Khi mọi máy cùng dùng Unicode, một ký tự luôn ứng với một mã nên không còn tình trạng đọc sai bảng mã; chỉ cần font có chứa chữ tiếng Việt để hiển thị.
UTF-8 khác Unicode ở điểm nào?
Unicode là bộ mã gán số cho ký tự, còn UTF-8 là cách mã hoá các số đó thành 1 đến 4 byte để lưu trong tệp hoặc truyền qua mạng.