UTF8 là gì?

  1. 26-05-2020 20:29:13
  2. 880
  3. 0
1  2  3  4  5
0/5 - 0 Bình chọn - 880 Lượt xem

UTF8 là gì?

UTF8 là gì?
Dưới đây chúng tôi sẽ chia sẻ cho các bạn một số kí hiệu về UTF8
Là phương thức Encoding rất phổ biến để miêu tả bảng mã Unicode trên bộ nhớ.
Khi người ta thảo luận để đưa ra phương thức Encoding bảng mã Unicode này trên máy tính.
Tất nhiên họ toàn là người Mỹ, họ muốn cả thế giới có thể dùng Unicode, nhưng không muốn bỏ phương thức Encoding cũ của họ cho ASCII. Họ đưa ra cách sau:

Với các kí tự từ 0(0x00) ~ 127(0x7F) (tức là của ASCII - có 128 kí tự) : vẫn là 1 byte. : 0x*0vvvvvvv
Với các kí tự từ **0x80 ~ 0x7FF* (có 1920 kí tự) sẽ dùng 2 byte : 0x*110vvvvv 0x10vvvvvv
Với các kí tự từ **0x800 ~ 0xFFFF* (có 63488 kí tự) sẽ dùng 3 byte : 0x*1110vvvv 0x10vvvvvv 0x10*vvvvvv
...

alt text

Một vài ví dụ nhận đuợc từ cách Encoding trên
ASCII vẫn là ASCII, vẫn là 1 byte
Kí tự A -> 65 -> 0x41; B -> 66 -> 0x42
Kí tự ngoài ASCII sẽ như thế nào:
Á -> 0x00C0, mã binary 1100 0000, gía trị của mã này nằm ở khoảng 0x80 -> 0x7FF nên giá trị ghi xuống phải ở dạng
0x*110vvvvv 0x10vvvvvv
Sẽ encode như sau:
Ta tách 6 bit cuối của kí tự đặt vào 6 bit cuối của byte thấp, hay byte thấp sẽ có gía trị là : 0x10000000
Còn 2 bit 11 của kí tự, ta đặt vào 2 bit cuối của byte cao, hay byte cao sẽ có giá trị là : 0x110vvv11, các bit không đuợc đặt cho bằng 0 hết, nên byte cao sẽ có giá trị là: 0x11000011
Cuối cùng ta được giá trị Encode của Á trong bằng UTF-8 là *0xC380**.
(Đúng theo link giáo khoa http://unicode-table.com/en/00C0/)

Cứ như vậy để mapping đến hết bảng unicode.
Ta thấy rằng, với cách encode này, giá trị trong bảng và giá trị đuợc lưu trữ không phải luôn luôn giống nhau nữa (trừ ASCII).
Ta sẽ thấy số các bit được đánh dấu đậm ở trên có giá trị cố định sẽ dùng để nhận biết.
Dựa vào các đuợc bit cố định ở đầu mỗi byte này mà chương trình đọc (editor,...) sẽ biết được đó là kí tự 1 byte (ASCII) hay kí tự nhiều byte.

Với các encode trên, các tài liệu viết bằng ASCII đương nhiên có dung lượng tối ưu.
Các kí tự châu Á hầu hết sẽ đuợc biểu diễn ở dạng 2 byte.
Điều này dẫn tới những khẳng định rằng "UTF8 là 2 byte, hay Unicode là 2 byte.".
Tiếng Việt có dấu của chúng ta 2 byte hình như là đúng, còn tất cả thì không phải. (Theo comment bạn @LeHuy11 bên dưới)

Dù có rất nhiều ưu điểm như trên. nó vẫn nhược điểm. Đó là các kí tự của một số nước mà nằm ngoài khoảng 0x80 ->0x7FF sẽ phải biểu diễn bằng 3 byte.
Dẫn đến cái đĩa cài Window cho Thái có dung lượng gấp 3 cái đĩa cài cho US???(Cái này đoán mò)
Và microsoft không dùng UTF-8 như là Encoding mặc định của họ. Dường như họ dùng UTF16. ( mong mọi người confirm giúp)

UTF16
Gần giống với cách Encode của UTF-8 nhưng nó dùng luôn 2 byte để encode cho cả ASCII.

Ví dụ A -> 65 -> 0x41 -> sẽ đuợc Encode thành 0x0041; B -> 66 -> 0x42 -> sẽ được Encode thành 0x0042.

Á -> 0x00C0 -> sẽ đuợc Encode thành 0x00C0.
À -> 0x00C1 -> sẽ đuợc Encode thành 0x00C1.
(Đúng theo link giáo khoa http://unicode-table.com/en/00C0/)

Với cách trên các kí tự ASCII sẽ có số byte gấp đôi.
Tuy nhiên dải kí tự từ 0x0000 -> 0xFFFF sẽ chỉ dùng 2 byte mà thôi.
Với khoảng này, nó phủ gần như như toàn bộ kí tự của thế giới rồi.
Hy vọng thông qua bài viết này giúp ích được cho các bạn hiểu hơn về một số kí tự trong utf8 là gì? và có nghĩa như thế nào

Bài viết khác

Hotline Hotline