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 Unicode và UTF-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.
- 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
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) Bốn nhóm dữ liệu, mỗi nhóm một kiểu mã hoá riêng
- 2) Bảng mã ASCII - 128 mã và những mốc nên thuộc
- 3) Unicode, UTF-8 và chỗ đứng cho tiếng Việt có dấu
- 4) Ước lượng dung lượng của một đoạn văn bản
- 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. |
| Unicode | IU-ni-cốt | bả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ư 'ă, ơ, ư'. |
| bit | bít | bit (đơ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. |
| string | xì-trinh | chuỗ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.
- 32
- 48
- 65
- 97
- 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.
- Vì từ trong tiếng Việt thường dài hơn từ trong tiếng Anh.
- 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.
- 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.
- d
- e
- i
- 101
- 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
- (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.
Phần học miễn phí, không cần tạo tài khoản.
Bài liên quan - Máy tính, dữ liệu & số hóa
Cùng mạch kiến thức với bài này, học nối tiếp cho chắc phần lí thuyết.