Mục lục bài họcĐang ở d01-b3
← A-Level Computer Science
0/30 bài đã học xong
Chương 1 · Data Representation: Number Bases, Binary Arithmetic and Character Sets · Bài 3/3 của chương · bài 3/30 của A-Level Computer Science

Character sets, and why ASCII was not enough

Bộ mã ký tự, và vì sao ASCII không đủ
← Mục lục bài học
Lý thuyết · English

A character set is an agreement

A computer stores only numbers, so text needs a table mapping each character to a code. ASCII uses $7$ bits, giving $128$ codes — enough for English letters, digits and punctuation. Extended ASCII uses $8$ bits for $256$.

Two facts about ASCII worth knowing

The codes are contiguous and ordered: 'A' is $65$, so 'C' is $67$; 'a' is $97$, exactly $32$ more than 'A'. That gap of $32$ is one bit, which is why changing case is a single bit operation. Digit '0' is $48$, so the character '7' minus $48$ gives the number $7$ — the standard way to convert a digit character to its value.

Why Unicode

$256$ codes cannot hold Vietnamese, Chinese, Arabic, Greek and emoji at the same time. Unicode gives every character in every writing system a unique code point. UTF-$8$ stores them in one to four bytes, and is designed so that the first $128$ code points are byte-identical to ASCII — old files still work.

The trade-off

Unicode text takes more storage than ASCII for the same message. That is the price of covering every language, and it is the comparison Cambridge asks for.

Giải thích tiếng Việt

Bộ mã ký tự là một thoả thuận

Máy tính chỉ lưu được số, nên văn bản cần một bảng ánh xạ mỗi ký tự sang một mã. ASCII dùng $7$ bit, cho $128$ mã — đủ cho chữ cái tiếng Anh, chữ số và dấu câu. Extended ASCII dùng $8$ bit nên có $256$.

Hai điều về ASCII đáng nhớ

Các mã liền nhau và đúng thứ tự: 'A' là $65$ nên 'C' là $67$; 'a' là $97$, hơn 'A' đúng $32$. Khoảng cách $32$ đó chính là một bit, và đó là lý do đổi hoa–thường chỉ là một phép trên một bit. Chữ số '0' có mã $48$, nên ký tự '7' trừ $48$ ra số $7$ — đây là cách chuẩn để đổi một ký tự chữ số thành giá trị.

Vì sao cần Unicode

$256$ mã không thể chứa cùng lúc tiếng Việt, tiếng Trung, tiếng Ả Rập, tiếng Hy Lạp và emoji. Unicode cấp cho mọi ký tự của mọi hệ chữ viết một điểm mã riêng. UTF-$8$ lưu chúng bằng một tới bốn byte, và được thiết kế sao cho $128$ điểm mã đầu tiên trùng khít từng byte với ASCII — nhờ vậy file cũ vẫn đọc được.

Cái giá phải trả

Văn bản Unicode tốn nhiều dung lượng hơn ASCII cho cùng một nội dung. Đó là giá của việc bao phủ mọi ngôn ngữ, và cũng chính là phép so sánh Cambridge hay hỏi.

Ví dụ — dùng tính chất liền mạch của bảng mã

Biết mã ASCII của 'A' là $65$ và của 'a' là $97$.

(a) Tính mã của 'F' và của 'f'. (b) Viết một biểu thức đổi một chữ hoa bất kỳ thành chữ thường tương ứng. (c) Giải thích vì sao ASCII không đủ cho tiếng Việt.

Giải.

(a) 'F' là chữ cái thứ sáu nên mã $= 65 + 5 = 70$. Chữ thường hơn chữ hoa đúng $32$, nên 'f' $= 70 + 32 = 102$.

(b) $\text{ma\_thuong} = \text{ma\_hoa} + 32$. Nói cách khác, đặt bit thứ sáu (giá trị $32$) lên $1$ — vì thế nhiều bộ xử lý đổi hoa–thường bằng một phép OR với $00100000$.

(c) Tiếng Việt cần các chữ có dấu như ă, ơ, ệ, ữ. Riêng bảng chữ cái tiếng Việt đã có $29$ chữ, cộng năm thanh điệu đặt trên nhiều nguyên âm khác nhau thì tổng số ký tự cần vượt xa khoảng trống còn lại trong $128$ mã của ASCII. Chưa kể nếu tài liệu còn có tiếng Trung hay emoji thì $256$ mã của Extended ASCII cũng không đủ. Unicode giải quyết bằng cách cấp điểm mã riêng cho từng ký tự của mọi hệ chữ viết.

Bẫy hay mất điểm — Nói ‘Unicode là bộ mã $16$ bit’. Unicode là một BẢNG ĐIỂM MÃ, không quy định số bit; UTF-$8$, UTF-$16$ và UTF-$32$ là ba cách MÃ HOÁ khác nhau của cùng bảng đó. Câu hỏi ‘nêu một ưu điểm của UTF-8’ đang hỏi về cách mã hoá, và câu trả lời đúng là nó tương thích ngược với ASCII và tiết kiệm dung lượng cho văn bản tiếng Anh.
Phải nhớ — Ba con số đáng nhớ: 'A' $=65$, 'a' $=97$, '0' $=48$. Một nguyên tắc: Unicode là bảng điểm mã, UTF-8 là cách lưu. Và một phép so sánh luôn được hỏi: phủ rộng hơn thì tốn dung lượng hơn.

Đọc xong rồi — làm thử ngay

Bài tập của chương Data Representation: Number Bases, Binary Arithmetic and Character Sets gồm 14 câu trắc nghiệm và 3 đề tự luận. Đáp án hiện ngay khi chọn, miễn phí.

Làm bài tập chương →