Tin Học KHMT
Ôn tập Tin học THPT › Tin học 10 › Bài 3
Tin học 10

Bài 3. Bảng mã kí tự và dung lượng của tệp văn bản

Bài này đi vào những con số cụ thể của việc mã hoá chữ viết: mã ASCII của từng kí tự, cách UnicodeUTF-8 chứa được tiếng Việt có dấu, cách ước lượng dung lượng một đoạn văn bản, và hai hàm ord() - chr() trong Python.

Chủ đề A · Máy tính, dữ liệu & số hóa - đọc khoảng 12 phút · 23 câu luyện tập trong ứng dụng

Tương ứng sách giáo khoa
  • Kết nối tri thứcTin học 10 - Bài 3. Một số kiểu dữ liệu và dữ liệu văn bảntr. 16–19
  • Cánh DiềuTin học 10 - Chủ đề A(CS) · Bài 3. Số hoá văn bảntr. 139
Xem bảng đối chiếu cả bộ →

Bắt đầu bằng một hình dung

Cuối tuần, Hà gõ xong bài cảm nhận môn Ngữ văn dài đúng hai trang rồi lưu vào thẻ nhớ. Cùng lúc đó, bạn cùng bàn là Khoa cũng gõ xong một bài tập tiếng Anh, cũng chừng ấy dòng, cũng suýt soát ngần ấy chữ. Đến lúc xem lại, Hà ngạc nhiên: tệp của mình nặng gần gấp đôi tệp của Khoa, dù số chữ thì gần như bằng nhau.

Chuyện lạ chưa dừng ở đó. Hà mang tệp sang chiếc máy tính cũ ở phòng thư viện để in. Máy mở được tệp thật, nhưng cả trang chỉ hiện ra những ô vuông nhỏ và những kí hiệu chẳng ra chữ gì. Trong khi đó, bài của Khoa mở trên đúng chiếc máy ấy lại hiện ra bình thường, không sai một chữ.

Cô giáo nghe kể liền cười: máy tính không nhìn thấy chữ như chúng ta đâu. Với nó, mỗi chữ cái chỉ là một con số đã được thoả thuận sẵn. Bảng thoả thuận dành cho chữ tiếng Anh có từ rất lâu, gọn nhẹ. Còn chữ tiếng Việt có dấu thì phải dùng một bảng rộng hơn nhiều, nên chiếm chỗ nhiều hơn; và nếu bên gửi với bên nhận dùng hai bảng khác nhau thì thứ hiện ra sẽ hoàn toàn vô nghĩa.

Bài học hôm nay trả lời đúng bốn câu hỏi ấy: bảng thoả thuận đó là gì, mỗi chữ ứng với con số nào, vì sao chữ có dấu tốn chỗ hơn, và làm thế nào tính được một đoạn văn bản chiếm bao nhiêu chỗ trong máy.

Nội dung bài học

  1. 1) Bốn nhóm dữ liệu, mỗi nhóm một kiểu mã hoá riêng
  2. 2) Bảng mã ASCII - 128 mã và những mốc nên thuộc
  3. 3) Unicode, UTF-8 và chỗ đứng cho tiếng Việt có dấu
  4. 4) Ước lượng dung lượng của một đoạn văn bản
  5. 5) ord() và chr() - hỏi thẳng Python mã của một kí tự

Tóm tắt lý thuyết cần nhớ

  • ASCII gán cho mỗi kí tự tiếng Anh một mã từ 0 đến 127, lưu vừa trong 1 byte; cần nhớ ba mốc 'A' = 65, 'a' = 97, '0' = 48 và dấu cách = 32.
  • Chữ hoa luôn có mã nhỏ hơn đúng 32 đơn vị so với chữ thường tương ứng, vì bảng mã xếp trọn cụm chữ hoa trước rồi mới đến cụm chữ thường.
  • Unicode gán mã cho kí tự của mọi ngôn ngữ, còn UTF-8 ghi ra tệp với số byte thay đổi: 1 byte cho kí tự ASCII, 2–3 byte cho kí tự tiếng Việt có dấu - nên tệp tiếng Việt nặng hơn tệp tiếng Anh cùng số kí tự.
  • Dung lượng văn bản = số kí tự (kể cả dấu cách) nhân số byte mỗi kí tự rồi chia 1024 để ra KB; trong Python, ord() cho mã của một kí tự và chr() cho kí tự ứng với một mã.

Thuật ngữ tiếng Anh trong bài

Tiếng AnhĐọc làNghĩa
ASCIIÁT-ki (như 'ask' + ki)bảng mã ASCII
Một cuốn từ điển gán mỗi chữ cái, chữ số tiếng Anh với một con số riêng để máy hiểu - ví dụ chữ 'A' là số 65.
UnicodeIU-ni-cốtbảng mã Unicode
Một cuốn từ điển khổng lồ, đủ chỗ cho chữ viết của mọi ngôn ngữ, kể cả tiếng Việt có dấu như 'ă, ơ, ư'.
bitbítbit (đơn vị nhỏ nhất)
Một bóng đèn tí hon chỉ có 2 trạng thái: sáng (số 1) hoặc tắt (số 0), không có nấc giữa.
stringxì-trinhchuỗi (xâu kí tự)
Một xâu các chữ cái, số hoặc kí hiệu viết trong dấu nháy.

Câu hỏi trắc nghiệm có đáp án

Mấy câu mẫu để bạn tự kiểm tra ngay. Trong ứng dụng, bài này có đủ 23 câu, chấm điểm tự động và giải thích từng câu sai.

Câu 1 · Nhận biết
Trong bảng mã ASCII, kí tự 'A' có mã là bao nhiêu?
  1. 32
  2. 48
  3. 65
  4. 97
Đáp án: C - Chữ hoa 'A' có mã 65, mở đầu cụm 26 chữ hoa kéo dài liên tiếp tới 'Z' là 90. Phương án 32 là mã của dấu cách, 48 là mã của kí tự chữ số '0', còn 97 là mã của chữ thường 'a' (lớn hơn mã của 'A' đúng 32 đơn vị) - đây là ba nhầm lẫn phổ biến nhất khi học các mốc của bảng mã.
Câu 2 · Nhận biết
Vì sao một tệp văn bản tiếng Việt có dấu thường nặng hơn tệp tiếng Anh có cùng số kí tự?
  1. Vì theo quy ước UTF-8, kí tự tiếng Việt có dấu chiếm 2–3 byte, còn kí tự ASCII chỉ chiếm 1 byte.
  2. Vì từ trong tiếng Việt thường dài hơn từ trong tiếng Anh.
  3. Vì máy tính phải lưu kèm cả phông chữ tiếng Việt vào bên trong tệp văn bản.
  4. Vì tệp tiếng Việt không được máy tính nén lại, còn tệp tiếng Anh thì luôn được nén.
Đáp án: A - Nguyên nhân duy nhất nằm ở số byte dùng để mã hoá từng kí tự: UTF-8 dùng 1 byte cho kí tự ASCII nhưng phải dùng 2 hoặc 3 byte cho kí tự tiếng Việt có dấu, nên cùng một số kí tự thì tệp tiếng Việt nặng hơn. Phương án về độ dài của từ sai vì đề bài đã cho hai tệp có cùng số kí tự. Phương án về phông chữ sai vì phông chữ là tệp riêng nằm trong hệ điều hành, tệp văn bản không chứa phông. Phương án về nén cũng sai vì việc nén hay không nén không phụ thuộc vào ngôn ngữ của nội dung.
Câu 3 · Thông hiểu
Biết ord('a') = 97, kết quả của lệnh print(chr(ord('a') + 4)) trong Python là gì?
  1. d
  2. e
  3. i
  4. 101
Đáp án: B - ord('a') cho 97, cộng thêm 4 được 101, rồi chr(101) trả về kí tự có mã 101 - chính là chữ e (vì 'a' là 97, 'b' 98, 'c' 99, 'd' 100, 'e' 101). Phương án d ứng với mã 100, tức đếm thiếu một bậc do quên rằng chính 'a' đã chiếm mã 97. Phương án i sai vì đó là kí tự mã 105, ứng với việc cộng thêm 8 chứ không phải 4. Phương án 101 sai vì hàm chr() đã chuyển con số 101 thành kí tự rồi, nên lệnh print in ra một chữ cái chứ không in ra con số.
Câu Đúng/Sai (Phần II) · Thông hiểu
Cho biết mỗi phát biểu sau đúng hay sai:
  • a)Trong bảng mã ASCII, mỗi kí tự được gán một mã từ 0 đến 127 nên lưu vừa trong 1 byte.Đúng
  • b)Mã của chữ 'a' nhỏ hơn mã của chữ 'A' vì cụm chữ thường được xếp trước cụm chữ hoa trong bảng mã.Sai
  • c)Theo quy ước UTF-8, mọi kí tự đều chiếm đúng 2 byte như nhau, bất kể là kí tự tiếng Anh hay tiếng Việt.Sai
  • d)Chữ hiển thị thành ô vuông hoặc kí tự lạ thường là do tệp được lưu bằng một bảng mã nhưng lại được mở bằng bảng mã khác.Đúng
Vì sao:
  • (a) Đúng - ASCII quy định 128 mã đánh số 0–127; số lớn nhất là 127 chỉ cần 7 bit nên một byte (8 bit) là thừa đủ để chứa một kí tự ASCII.
  • (b) Sai - ngược lại mới đúng: cụm chữ hoa được xếp trước, nên 'A' mang mã 65 còn 'a' mang mã 97, chữ hoa luôn nhỏ hơn chữ thường tương ứng đúng 32 đơn vị.
  • (c) Sai - điểm cốt lõi của UTF-8 chính là số byte thay đổi: 1 byte cho kí tự ASCII, 2 hoặc 3 byte cho kí tự tiếng Việt có dấu; nếu mọi kí tự đều 2 byte thì tệp tiếng Anh đã nặng gấp đôi một cách vô ích.
  • (d) Đúng - trong tệp chỉ có một dãy byte thuần tuý, phần mềm phải đoán bảng mã để đọc; đoán sai thì dãy byte bị cắt sai và cho ra kí tự vô nghĩa, chọn lại đúng bảng mã là chữ hiện bình thường.

Thử ngay: minh hoạ từng bước

Bấm từng bước để tự xem cơ chế hoạt động, hoặc bấm “Tự chạy” cho nó tiến mỗi giây một lần. Đổi được dữ liệu đầu vào - không cần đăng nhập.

Học trọn bài này trong ứng dụng

Bài giảng đầy đủ, 23 câu luyện tập chấm tự động, thi thử đúng cấu trúc đề tốt nghiệp (24 trắc nghiệm + 4 Đúng/Sai), bài thực hành máy tự chấm và gia sư AI giải thích chỗ sai.

Mở bài 3 trong ứng dụng

Phần học miễn phí, không cần tạo tài khoản.