ASCII thực sự ban đầu được hình thành như một mã 7 bit. Điều này đã được thực hiện tốt trước khi byte 8 bit trở nên phổ biến và thậm chí vào những năm 1990, bạn có thể tìm thấy phần mềm giả định rằng nó có thể sử dụng bit thứ 8 của mỗi byte văn bản cho các mục đích riêng ("không phải là 8 bit sạch"). Ngày nay, mọi người nghĩ về nó như một mã hóa 8 bit, trong đó các byte từ 0x80 đến 0xFF không có ý nghĩa xác định, nhưng đó là một retcon .
Có hàng chục mã hóa văn bản sử dụng bit thứ 8; chúng có thể được phân loại là tương thích với ASCII hoặc không, và chiều rộng cố định hoặc thay đổi. Tương thích với ASCII có nghĩa là bất kể ngữ cảnh , các byte đơn lẻ có giá trị từ 0x00 đến 0x7F mã hóa các ký tự giống như trong ASCII. Bạn không muốn liên quan gì đến mã hóa văn bản không tương thích ASCII nếu bạn có thể tránh được; các chương trình ngây thơ mong đợi ASCII có xu hướng hiểu sai về chúng theo kiểu thảm khốc, thường là phá vỡ an ninh. Ngày nay chúng không còn được dùng nữa nên (ví dụ) HTML5 cấm sử dụng chúng trên trang Web công cộng, ngoại trừ UTF-16 . Tôi sẽ không nói về chúng nữa.
Mã hóa độ rộng cố định có nghĩa là nó giống như thế nào: tất cả các ký tự đều được mã hóa bằng cách sử dụng cùng một số byte. Để tương thích với ASCII, mã hóa cố định với phải mã hóa tất cả các ký tự của nó chỉ bằng một byte, vì vậy nó không thể có nhiều hơn 256 ký tự. Mã hóa phổ biến nhất hiện nay là Windows-1252 , một phần mở rộng của ISO 8859-1 .
Hiện nay chỉ có một mã hóa tương thích với ASCII có độ rộng thay đổi đáng được biết đến, nhưng nó rất quan trọng: UTF-8 , gói tất cả Unicode thành một bảng mã tương thích ASCII. Bạn thực sự muốn sử dụng nó nếu bạn có thể quản lý nó.
Lưu ý cuối cùng, "ASCII" ngày nay lấy định nghĩa thực tế của nó từ Unicode, không phải là tiêu chuẩn ban đầu của nó (ANSI X3.4-1968), bởi vì trong lịch sử đã có hàng chục biến thể trên bảng kê 127 ký tự ASCII - ví dụ, một số dấu câu có thể được thay thế bằng các chữ cái có dấu để tạo điều kiện cho việc truyền tải văn bản tiếng Pháp. Ngày nay, tất cả các biến thể đó đều lỗi thời và khi mọi người nói "ASCII" thì có nghĩa là các byte có giá trị 0x00 đến 0x7F mã hóa các điểm mã Unicode từ U + 0000 đến U + 007F. Điều này có lẽ sẽ chỉ quan trọng đối với bạn nếu bạn thấy mình đang viết một tiêu chuẩn kỹ thuật.
Nếu bạn quan tâm đến lịch sử của ASCII và các mã hóa trước nó, hãy bắt đầu với bài báo "Sự phát triển của mã ký tự, 1874-1968" (samizdat copy tại http://falsedoor.com/doc/ascii_evolution-of- character-Code.pdf ) và sau đó đuổi theo các tài liệu tham khảo của nó (nhiều trong số đó không có sẵn trên mạng và có thể khó tìm ngay cả khi truy cập vào thư viện đại học, tôi rất tiếc phải nói).