utf-8 là gì là một trong những từ khóa được tìm kiếm nhiều nhất trên Google cho chủ đề utf-8 là gì. Trong bài viết này cachthietkeweb.vn sẽ viết bài viết utf-8 là gì? Tại sao chúng ta cần biết về utf-8?

Utf 8 Là Gì

utf-8 là gì? Tại sao chúng ta cần biết về utf-8?

Chúng ta thường nghe về unicode, utf-8, utf16 hay shift-js.

Trong bài viết này, xin chỉ sử dụng các định nghĩa này một cách rõ ràng để khi gặp các vấn đề về bộ ký tự hoặc mã hóa, bạn có cách giải quyết phù hợp.

  1. Mã hóa ký tự là gì?
  2. Mã hóa

  3. là gì?
  4. Unicode, shift-jis, utf8, utf16 nghĩa là gì?
  5. 1. Mã hóa ký tự là gì?

    Bảng mã char là một bảng được sử dụng để lập chỉ mục một bộ ký tự (char), sao cho mỗi ký tự được ánh xạ tới một số (mã) duy nhất. Các giá trị mã luôn được đánh số liên tiếp theo số gia. Điều này sẽ tạo ra một chuỗi cho mỗi ký tự trong bộ ký tự trên.

    Chúng tôi biết mã hóa ascii:

    Trong bảng trên, chúng ta thấy cột char, giới thiệu các ký tự; cột dec (hoặc hex) chứa giá trị được ánh xạ tới ký tự tương ứng trong cột char.

    Định nghĩa mã hóa rất dễ hiểu, phần khó nằm ở phần thứ hai

    2. Mã hóa là gì?

    Chúng ta vừa có khái niệm về mã hóa ký tự. Đến đây, về cơ bản nó giống như menu bảng giá trong quán bar. Vì chúng tôi muốn sử dụng các ký tự của bảng này trong máy tính, chúng tôi cần một cách để ánh xạ các ký tự này vào máy tính.

    Làm thế nào để mô tả nó? Có một cách tiếp cận rất hay để sử dụng trong trường hợp này: tức là mỗi ký tự được lưu trữ trong bộ nhớ có cùng độ dài tính bằng byte.

    Nếu giá trị từ 0 ~ 100: Nếu giá trị từ 0 ~ 60000, chúng tôi cần 1 byte (vì giá trị có thể vào khoảng: 0 ~ 255 ) >: Chúng tôi cần 2 byte (vì giá trị có thể vào khoảng: 0 ~ 65535) Nếu giá trị 0 ~ 1000: chúng tôi vẫn cần 2 byte (vì giá trị có thể vào khoảng: 0 ~ 1000 )

    Với công thức này, giá trị cần lưu chính là giá trị trong bảng mã ký tự trên nên đương nhiên giá trị lưu sẽ giống với giá trị ghi trong bảng.

    Ví dụ, giống như một bảng ascii, chúng ta cần 1 byte: a -> 65 (0x41); b-> 66 (0x42) Giả sử hướng dẫn này mã hóa một tập con unicode (từ 0x0000 -> 0xffff), chúng tôi sẽ cần 2 byte. Ah-> 0x00c0 -> sẽ luôn được lưu dưới dạng 0x00c0. A->0x00c1 -> sẽ luôn được lưu dưới dạng 0x00c1. Nếu bạn sử dụng nó như thế này mọi lúc, tất cả các mã hóa sẽ mã hóa độc đáo.

    Nhưng có một chủ đề ở đây, giả sử rằng mọi người đều sử dụng unicode (giá trị tối đa hiện tại là 0x1f8ff), tức là tất cả mã hóa cần khoảng 3 byte. Nếu vậy, một tài liệu chỉ có ascii sẽ có kích thước gấp 3 lần bình thường. Điều này là hoàn toàn sai. Vậy thì sao? ? ? ? Một lý do lịch sử khác. Đó là trước khi máy tính phổ biến và nó hầu như chỉ được sử dụng ở Mỹ. Mã hóa thường được hầu hết các máy tính sử dụng là ascii và phương thức mã hóa có độ dài cố định 1 byte. Hiện tại còn nhiều nhân vật nữa xuất hiện, bạn đọc có giúp không? Sử dụng các bảng mã mới là điều đương nhiên, nhưng mã hóa thì sao? Họ có bỏ cách tiếp cận độ dài cố định 1 byte để thay thế nó bằng độ dài cố định nhiều byte không? ? ?

    3. unicode, shift-js, utf8, utf16

    unicode là một mã hóa chứa hầu hết tất cả các ký tự trong hầu hết các ngôn ngữ trên thế giới. shift-jis là một mã hóa được hầu hết các máy tính ở Nhật Bản sử dụng, do jis cung cấp. utf8 là gì? Đó là một phương pháp mã hóa rất đa dạng để thể hiện bảng mã unicode trong bộ nhớ. Khi mọi người thảo luận về cách mã hóa bảng mã unicode này trên máy tính. Tất nhiên họ đều là người Mỹ muốn thế giới có thể sử dụng unicode nhưng không muốn từ bỏ các thủ thuật mã hóa cũ của họ cho ascii. Họ đề xuất phương pháp sau:

    Các ký tự từ

    0(0x00) ~ 127(0x7f) (tức là ascii – 128 ký tự): vẫn là 1 byte. : 0x*0vvvvvvv Chứa các ký tự từ **0x80 ~ 0x7ff* (chứa 1920 ký tự) và sẽ sử dụng 2 byte: 0x*110vvvvv 0x10vvvvv Chứa các ký tự từ **0x800 ~ 0xffff* (chứa 63488 ký tự) sẽ sử dụng 3 byte byte: 0x* 1110vvvv 0x10vvvvvv 0x10*vvvvv…

    Một số gợi ý trong hướng dẫn mã hóa ascii Luôn là ascii, luôn là ký tự 1 byte a -> 65-> 0x41; b-> 66-> 0x42 Các ký tự không phải ascii phải như sau Hiển thị: asia -> 0x00c0, mã nhị phân 1100 0000, giá trị của mã này nằm trong phạm vi 0x80 -> 0x7ff nên hãy nhớ Giá trị bên dưới phải ở dạng 0x*110vvvv 0x10vvvvvv sẽ được mã hóa như sau: ta tách 6 bit cuối của ký tự và đặt chúng vào 6 bit cuối của byte thấp, hoặc byte thấp sẽ có giá trị: 0x10000000 và 2 bit của ký tự 11, ta đặt 2 bit cuối cùng của byte cao, nếu không thì byte cao sẽ có giá trị: 0x110vvv11, k bit được đặt bằng 0, nên byte cao sẽ có giá trị: 0x11000011 cuối cùng, ta nhận được asia trong utf- 8 Giá trị được mã hóa là *0xc380**. (Nhấp vào liên kết giảng dạy http://unicode-table.com/en/00c0/)

    và cứ thế ánh xạ đến cuối bảng unicode. Chúng tôi thấy rằng với kỹ thuật mã hóa này, giá trị bảng và giá trị được lưu trữ không phải lúc nào cũng giống nhau (ascii sang một bên). Chúng ta sẽ thấy số chữ số được in đậm ở trên và giá trị cố định để nhận dạng. Một chương trình đọc (trình soạn thảo, …) sẽ biết đó là ký tự 1 byte (ascii) hay ký tự nhiều byte, dựa trên một bit cố định ở đầu mỗi byte.

    Với cách mã hóa trên, các tài liệu được viết bằng ascii tất nhiên là tối ưu về kích thước. Các ký tự châu Á chủ yếu sẽ được biểu diễn dưới dạng 2 byte. Điều này dẫn đến khẳng định “utf8 là 2 byte hoặc unicode là 2 byte.”. Hình ảnh 2 byte tiếng Việt có dấu của chúng tôi trông thật, nhưng không phải vậy. (Dựa trên nhận xét của bạn bên dưới @lehuy11)

    Mặc dù có nhiều ưu điểm như đã nói ở trên. Đây luôn là một nhược điểm. Các ký tự cho một số quốc gia nằm ngoài phạm vi 0x80 ->0x7ff phải được biểu thị bằng 3 byte. Một đĩa cd cài đặt windows được kéo sang Thái có kích thước gấp 3 lần đĩa của chúng tôi? ? ? (đây chỉ là phỏng đoán) và Microsoft không sử dụng utf-8 làm mã hóa mặc định của họ. Có vẻ như họ sử dụng utf16. (Mong mọi người xung quanh xác nhận)

    utf16 gần giống như lệnh bộ mã hóa utf-8, nhưng nó sử dụng 2 byte để mã hóa toàn bộ ascii.

    Ví dụ a -> 65-> 0x41 -> sẽ được mã hóa thành 0x0041; b-> 66-> 0x42 > -> sẽ được mã hóa thành 0x0042.

    Châu Á -> 0x00c0 -> sẽ được mã hóa thành 0x00c0. ah-> 0x00c1 -> sẽ được mã hóa thành 0x00c1. (Theo link giáo trình http://unicode-table.com/en/00c0/)

    Phương thức sử dụng ký tự ascii sẽ có số byte gấp đôi. Nhưng các ký tự từ 0x0000 -> 0xffff sẽ chỉ sử dụng 2 byte. Với phạm vi này, hầu như tất cả các nhân vật trên thế giới đều được phủ sóng. Đĩa cài đặt windows giống nhau ở mọi nơi, cùng kích thước. :))

    Nguồn: kipalog.com

Kiểm tra tiếng Anh trực tuyến

Bạn đã biết trình độ tiếng Anh hiện tại của mình chưa?
Bắt đầu làm bài kiểm tra

Nhận tư vấn lộ trình từ ACET

Hãy để lại thông tin, tư vấn viên của ACET sẽ liên lạc với bạn trong thời gian sớm nhất.