Sự khác biệt giữa UTF-8 và Unicode

Để câu trả lời mà nhiều người thắc mắc về UTF-8 dưới đây chúng tôi sẽ chia sẻ cho các bạn một số kí hiệu về UTF8



Để máy tính xử lý các số như byte ..., máy tính 8 bit sẽ coi 1 byte là 8 bit , máy tính 16 bit sẽ mở rộng đến 2 byte, v.v.

Các mã hóa ký tự cũ, chẳng hạn như ASCII là từ thời đại 8 bit (trước) ở thời điểm đó người ta đã cố gắng nhồi nhét ngôn ngữ lập trình bằng tiếng anh trong điện toán vào thời điểm đó thành các số từ 0 đến 127 (7 bit ). 

Với 26 chữ cái trong bảng chữ cái, cả ở dạng viết hoa và không viết hoa, số và dấu chấm câu, hoạt động khá tốt. ASCII được mở rộng thêm 8 bit cho các ngôn ngữ khác, không phải tiếng Anh, nhưng 128 số/điểm mã được cung cấp bởi bản mở rộng này sẽ được ánh xạ tới các ký tự khác nhau tùy thuộc vào ngôn ngữ được hiển thị.
 Các tiêu chuẩn ISO-8859 là tiêu chuẩn phổ biến nhất của ánh xạ này; ISO-8859-1 và ISO-8859-15 ( có hai phiên bản khác nhau của tiêu chuẩn ISO 8859 là ISO-Latin-1, latin1).

Nhưng điều đó là không đủ khi bạn muốn thể hiện các ký tự từ nhiều ngôn ngữ, vì vậy việc nhồi nhét tất cả các ký tự có sẵn vào một byte sẽ không đủ.

Về cơ bản có hai loại mã hóa khác nhau: 

+ Một loại mở rộng phạm vi giá trị bằng cách thêm nhiều bit. 

Ví dụ : Về các bảng mã này sẽ là UCS2 (2 byte = 16 bit) và UCS4 (4 byte = 32 bit). 

- Họ bị vấn đề tương tự như các tiêu chuẩn ASCII và ISO-8859, vì phạm vi giá trị của chúng vẫn còn hạn chế, ngay cả khi giới hạn cao hơn rất nhiều.

+ Loại mã hóa khác sử dụng số byte thay đổi trên mỗi ký tự và được biết đến phổ biến nhất cho mã này là mã hóa UTF. 
Tất cả các mã hóa UTF hoạt động theo cách gần giống nhau: bạn chọn kích thước đơn vị, đối với UTF-8 là 8 bit, đối với UTF-16 là 16 bit và đối với UTF-32 là 32 bit. 

- Sau đó, tiêu chuẩn định nghĩa trong một số các bit này là các cờ, nếu chúng được đặt, thì đơn vị tiếp theo trong chuỗi đơn vị sẽ được coi là một phần của cùng một ký tự. Nếu chúng không được đặt, đơn vị này thể hiện đầy đủ một ký tự. Do đó, các ký tự (tiếng Anh) phổ biến nhất chỉ chiếm một byte trong UTF-8 (hai  byte trong UTF-16, 4  byte trong UTF-32), nhưng các ký tự ngôn ngữ khác có thể chiếm 6 byte trở lên.

Mã hóa nhiều byte có ưu điểm là chúng tương đối hiệu quả về mặt không gian, nhưng nhược điểm của các hoạt động như tìm chuỗi con, so sánh, v.v ... đều phải giải mã các ký tự thành mã Unicode trước khi các hoạt động như vậy có thể được thực hiện.

Cả các tiêu chuẩn UCS và các tiêu chuẩn UTF đều mã hóa các điểm mã như được định nghĩa trong Unicode. Về lý thuyết, các mã hóa đó có thể được sử dụng để mã hóa bất kỳ số nào (trong phạm vi hỗ trợ mã hóa) nhưng tất nhiên các mã hóa này được thực hiện để mã hóa các điểm mã Unicode. Và đó là mối quan hệ giữa UTF-8 và Unicode.

Windows xử lý các chuỗi được gọi là "Unicode" dưới dạng chuỗi UTF-16, trong khi hầu hết các UNIX mặc định là UTF-8. Các giao thức truyền thông như HTTP có xu hướng hoạt động tốt nhất với UTF-8, vì kích thước đơn vị trong UTF-8 giống như trong ASCII và hầu hết các giao thức như vậy được thiết kế trong thời đại ASCII. Mặt khác, UTF-16 mang lại hiệu suất tốt nhất trung bình không gian/xử lý khi đại diện cho tất cả các ngôn ngữ.

Tiêu chuẩn Unicode xác định ít điểm mã hơn có thể được biểu diễn trong 32 bit. Do đó, cho tất cả các mục đích thực tế, UTF-32 và UCS4 đã trở thành cùng một mã hóa, vì bạn không cần phải xử lý các ký tự nhiều đơn vị trong UTF-32.

Hy vọng những thông tin trên hữu ích cho bạn! Nếu bài viết còn chưa đầy đủ , mong bạn để lại góp ý bằng cách bình luận bên dưới.

Đăng Nhận Xét

0 Nhận xét