Có bao nhiêu bit hoặc byte cho mỗi "ký tự"?
Có bao nhiêu bit hoặc byte cho mỗi "ký tự"?
Câu trả lời:
Nó phụ thuộc vào ký tự là gì và mã hóa của nó:
Một ký tự ASCII trong bảng mã ASCII 8 bit là 8 bit (1 byte), mặc dù nó có thể vừa với 7 bit.
Một ký tự ISO-8895-1 trong mã hóa ISO-8859-1 là 8 bit (1 byte).
Một ký tự Unicode trong bảng mã UTF-8 nằm trong khoảng từ 8 bit (1 byte) đến 32 bit (4 byte).
Một ký tự Unicode trong mã hóa UTF-16 nằm trong khoảng từ 16 (2 byte) đến 32 bit (4 byte), mặc dù hầu hết các ký tự phổ biến đều có 16 bit. Đây là bảng mã được Windows sử dụng trong nội bộ.
Một ký tự Unicode trong bảng mã UTF-32 luôn là 32 bit (4 byte).
Một ký tự ASCII trong UTF-8 là 8 bit (1 byte) và trong UTF-16 - 16 bit.
Các ký tự bổ sung (không phải ASCII) trong ISO-8895-1 (0xA0-0xFF) sẽ chiếm 16 bit trong UTF-8 và UTF-16.
Điều đó có nghĩa là có từ 0,03125 đến 0,125 ký tự trong một bit.
Có 8 bit trong một byte (thường nói trong Windows).
Tuy nhiên, nếu bạn đang xử lý các ký tự, nó sẽ phụ thuộc vào bộ ký tự / mã hóa. Ký tự Unicode có thể là 2 hoặc 4 byte, do đó sẽ là 16 hoặc 32 bit, trong khi Windows-1252 đôi khi được gọi không chính xác là ANSI chỉ là 1 byte nên 8 bit.
Trong phiên bản Windows Châu Á và một số phiên bản khác, toàn bộ hệ thống chạy ở dạng byte kép, vì vậy một ký tự là 16 bit.
ĐÃ CHỈNH SỬA
Theo nhận xét của Matteo, tất cả các phiên bản Windows hiện đại đều sử dụng 16 bit bên trong cho mỗi ký tự.
wchar_t
), không chỉ phiên bản châu Á, và tất cả các ứng dụng mới hơn cũng vậy. (Trên Linux, thay vào đó, nó là một câu chuyện hoàn toàn khác nhau từ thường UTF-8 được sử dụng trong suốt toàn bộ hệ thống)
char
, trong khi các chuỗi Unicode được lưu trữ bằng cách sử dụng wchar_t
kiểu này. Nhân tiện, khi NT được bắt đầu a wchar_t
là đủ để tránh các cặp thay thế, nhưng bây giờ nó là UTF-16 thậm chí các wchar_t
chuỗi có thể có các ký tự có độ dài thay đổi, vì vậy trên Windows, một ký tự Unicode trong có thể chiếm từ 2 đến 4 byte (1 hoặc 2 wchar_t
).
:)