Encoding: Code page là gì ? - QuânSysAd's Blog

09 tháng 3 2021

Encoding: Code page là gì ?

Như ta đã biết bộ mã ASCII mỗi ký tự có kích cỡ 1 byte (hay 8 bit). Đủ để mã hóa được 255 ký tự chữ. Trong mã ASCII, vị trí 0-127 thì đã được chuẩn hóa cho các ký tự thông thường, còn những phần vị trí chưa dùng từ 128-255 mỗi nơi lại muốn định nghĩa một kiểu dành cho các ký tự khác nhau, mỗi kiểu định nghĩa đó được gọi là code page. Ban đầu các quốc gia khác nhau tự định nghĩa các code page riêng để hiển thị ký tự


Đến đây, nếu mỗi quốc gia áp dụng một code page riêng, thì trên 1 hệ thống đa ngôn ngữ nếu dùng code page tiếng Trung thì tiếng Anh ko đọc được ký tự hiển thị bị vỡ , mà dùng code page tiếng Anh thì tiếng Trung hiển thị sẽ bị vỡ.


Điều này đặt ra cần phải tăng kích cỡ bộ mã thay vì 1 byte ta cần tính toán để tăng độ dài đủ để mã hóa được tất cả ký tự của tất cả các quốc gia trên thế giới.


Unicode ra đời


Đôi khi Unicode được gọi dưới cái tên UCS hoặc ISO/IEC 10646
Unicode tạo ra nhiều code points, map nhiều ký tự trên thế giới vào các key mà tất cả các máy tính đều có thể tham chiếu (dạng nôm na như từ điển)
Một tập hợp các code points được gọi là character set, đây là thứ gọi là Unicode
Các ký tự sẽ được map với key mà tất cả máy tính tham chiếu tới VD:
U+0048 : LATIN CAPITAL LETTER H
U+0065 : LATIN SMALL LETTER E


Xem tất cả các Unicode character point: https://unicode-table.com/en/


Hoặc xem đoạn text mã hóa như nào:
https://www.babelstone.co.uk/Unicode/whatisit.html


Về cơ bản ta có một bộ từ điển code point được map ánh xạ với characters. Một tập ký tự thực sự lớn.



Một vấn đề nữa Unicode Transform Protocol (UTF)


UTF là cách ta mã hóa Unicode code points. UTF encoding được định nghĩa bởi tiêu chuẩn Unicode, và có thể mã hóa mỗi code point Unicode đơn lẻ




Nhưng có các kiểu tiêu chuẩn UTF khác nhau. Chúng khác nhau phụ thuộc vào lượng byte được sử dụng để mã hóa một code point. Chúng cũng phụ thuộc vào bạn có sử dụng UTF-8 (một byte mỗi code point) hay là UTF-16 (2 byte mỗi code point) hoặc UTF-32 (4 byte mỗi code point).



Nếu chúng ta có các bộ mã khác nhau, làm sao chúng ta biết mã hóa (encoding) nào file sẽ sử dụng. Có một thuật ngữ được gọi là Byte Order Mark (BOM) thỉnh thoảng được gọi là Encoding Signature. BOM là 2 byte marker ở đầu của file mà cho biết file sử dụng bộ mã hóa nào.



Đầu tiên bạn đọc BOM để biết encoding. Bạn giải mã file thành Unicode code points, và sau đó biểu diễn ký tự từ Unicode character set thành các ký tự được vẽ trên màn hình.

Không có nhận xét nào: