Trang chủ » làm thế nào để » Tại sao các ký tự tiếng Anh cần ít byte hơn để thể hiện chúng hơn các ký tự trong bảng chữ cái khác?

    Tại sao các ký tự tiếng Anh cần ít byte hơn để thể hiện chúng hơn các ký tự trong bảng chữ cái khác?

    Trong khi hầu hết chúng ta có lẽ chưa bao giờ ngừng suy nghĩ về nó, các ký tự chữ cái không phải là tất cả cùng kích thước về số byte cần thiết để thể hiện chúng. Nhưng tại sao vậy? Bài hỏi và trả lời của SuperUser hôm nay có câu trả lời cho câu hỏi của người đọc tò mò.

    Phiên hỏi và trả lời hôm nay đến với chúng tôi nhờ sự hỗ trợ của SuperUser - một phân ngành của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều khiển.

    Ảnh chụp màn hình biểu đồ một phần ASCII do Wikipedia cung cấp.

    Câu hỏi

    Trình đọc SuperUser khajvah muốn biết tại sao các bảng chữ cái khác nhau chiếm dung lượng đĩa khác nhau khi được lưu:

    Khi tôi đặt 'a' trong một tệp văn bản và lưu nó, nó làm cho nó có kích thước 2 byte. Nhưng khi tôi đặt một ký tự như 'ա' (một chữ cái trong bảng chữ cái tiếng Armenia), nó làm cho nó có kích thước 3 byte.

    Sự khác biệt giữa các bảng chữ cái trên máy tính là gì? Tại sao tiếng Anh chiếm ít không gian hơn khi lưu?

    Chữ cái là chữ cái, phải không? Có thể không! Câu trả lời cho bí ẩn bảng chữ cái này là gì?

    Câu trả lời

    Những người đóng góp cho SuperUser Doktoro Reichard và ernie có câu trả lời cho chúng tôi. Đầu tiên, Doktoro Reichard:

    Một trong những sơ đồ mã hóa đầu tiên được phát triển để sử dụng trong các máy tính chính là ASCII (Mã tiêu chuẩn Mỹ để trao đổi thông tin) Tiêu chuẩn. Nó được phát triển vào những năm 1960 tại Hoa Kỳ.

    Bảng chữ cái tiếng Anh sử dụng một phần của bảng chữ cái Latinh (ví dụ, có một vài từ có dấu trong tiếng Anh). Có 26 chữ cái riêng trong bảng chữ cái đó, không xem xét trường hợp. Và cũng sẽ phải tồn tại các số riêng lẻ và dấu chấm câu trong bất kỳ sơ đồ nào giả vờ mã hóa bảng chữ cái tiếng Anh.

    Những năm 1960 cũng là thời điểm máy tính không có dung lượng bộ nhớ hoặc dung lượng đĩa mà chúng ta có bây giờ. ASCII được phát triển để trở thành một đại diện tiêu chuẩn của một bảng chữ cái chức năng trên tất cả các máy tính Mỹ. Vào thời điểm đó, quyết định làm cho mỗi ký tự ASCII dài 8 bit (1 byte) được đưa ra do các chi tiết kỹ thuật của thời gian (bài viết trên Wikipedia đề cập đến thực tế là băng đục lỗ giữ 8 bit tại một vị trí tại một thời điểm). Trong thực tế, sơ đồ ASCII ban đầu có thể được truyền bằng 7 bit và thứ tám có thể được sử dụng để kiểm tra chẵn lẻ. Các phát triển sau này đã mở rộng lược đồ ASCII ban đầu để bao gồm một số ký tự có dấu, toán học và đầu cuối.

    Với sự gia tăng gần đây của việc sử dụng máy tính trên toàn thế giới, ngày càng có nhiều người từ các ngôn ngữ khác nhau truy cập vào máy tính. Điều đó có nghĩa là, đối với mỗi ngôn ngữ, các sơ đồ mã hóa mới phải được phát triển, độc lập với các lược đồ khác, sẽ xung đột nếu được đọc từ các thiết bị đầu cuối ngôn ngữ khác nhau.

    Unicode ra đời như một giải pháp cho sự tồn tại của các thiết bị đầu cuối khác nhau bằng cách hợp nhất tất cả các ký tự có ý nghĩa có thể vào một bộ ký tự trừu tượng duy nhất.

    UTF-8 là một cách để mã hóa bộ ký tự Unicode. Nó là một mã hóa có chiều rộng thay đổi (nghĩa là các ký tự khác nhau có thể có kích thước khác nhau) và nó được thiết kế để tương thích ngược với sơ đồ ASCII trước đây. Như vậy, bộ ký tự ASCII sẽ duy trì kích thước một byte trong khi bất kỳ ký tự nào khác có kích thước từ hai byte trở lên. UTF-16 là một cách khác để mã hóa bộ ký tự Unicode. So với UTF-8, các ký tự được mã hóa thành một bộ gồm một hoặc hai đơn vị mã 16 bit.

    Như đã nêu trong các nhận xét khác, ký tự 'a' chiếm một byte đơn trong khi 'ա' chiếm hai byte, biểu thị mã hóa UTF-8. Các byte bổ sung trong câu hỏi ban đầu là do sự tồn tại của một ký tự dòng mới ở cuối.

    Tiếp theo là câu trả lời từ ernie:

    1 byte là 8 bit và do đó có thể biểu thị tối đa 256 (2 ^ 8) giá trị khác nhau.

    Đối với các ngôn ngữ yêu cầu nhiều khả năng hơn thế này, không thể duy trì ánh xạ 1 đến 1 đơn giản, do đó cần nhiều dữ liệu hơn để lưu trữ một ký tự.

    Lưu ý rằng nhìn chung, hầu hết các bảng mã đều sử dụng 7 bit đầu tiên (128 giá trị) cho các ký tự ASCII. Điều đó để lại bit thứ 8, hoặc thêm 128 giá trị cho nhiều ký tự hơn. Thêm các ký tự có dấu, ngôn ngữ châu Á, Cyrillic, v.v. và bạn có thể dễ dàng thấy tại sao 1 byte không đủ để chứa tất cả các ký tự.


    Có một cái gì đó để thêm vào lời giải thích? Tắt âm thanh trong các ý kiến. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange am hiểu công nghệ khác? Kiểm tra chủ đề thảo luận đầy đủ ở đây.