Bảng mã ký tự, Encoding là Gì? Phương thức Encode, Decode

Thảo luận trong 'Các quảng cáo khác' bắt đầu bởi hieunv1996, 5/8/16.

  1. hieunv1996

    hieunv1996 Youtube Master Race

    Tham gia ngày:
    30/6/16
    Bài viết:
    0
    Bảng mã ký tự, Encoding là Gì? Phương thức Encode, Decode

    Chúng ta thường nghe tới các từ ngữ Unicode, UTF-8, UTF16,... Trong bài viết này thi công lắp đặt mạng văn phòng sẽ cùng bạn đi làm rõ các khái niệm này.

    1. Bảng mã ký tự là gì?

    Bảng mã ký tự(Tiếng anh: Char code table) là một bảng dùng để biểu thị chỉ số cho một tập ký tự. Với mỗi ký tự ta được ánh xạ từ số duy nhất gọi là code.
    Giá trị của code thì được đánh số tăng dần. Điều này tạo ra thứ tự cho từng ký tự và tạo nên bảng tập hợp các ký tự.

    Bảng mã ASCII:

    [​IMG]

    Ở bảng mã trên, ta thấy cột char mô tả ký tự. Các cột Dec/ Hex chứa giá trị ánh xạ từ cột Char ở hàng tương ứng.

    2. Encoding là gì ?

    Vừa rồi bạn đã có khái niệm Bảng mã ký tự là gì. Trông nó như một bảng báo giá đồ ăn của một cửa hàng vậy.

    Bây giờ, nếu muốn sử dụng các ký tự trong bảng chữ cái đó ta cần một phương thức để mapping các ký tự đó vào máy tính.

    Có một phương pháp thường được dùng là mọi ký tự được lưu trữ trên bộ nhớ với độ dài byte.

    - Nếu giá trị từ 0 ~ 100 : ta cần 1 byte ( vì giá trị có thể sẽ là khoảng: 0 ~ 255)
    - Nếu giá trị từ 0 ~ 60000 : ta cần 2 byte (vì giá trị có thể sẽ là khoảng: 0 ~ 65535)
    - Nếu giá trị từ 0 ~ 1000 : ta vẫn cần 2 byte (vì giá trị có thể sẽ là khoảng: 0 ~ 1000)d

    Với cách này, giá trị được lưu chính là giá trị trong bảng mã ký tự ở trên nên các giá trị được lưu xuống chính là giá trị trọng bảng.

    VD: A - 65, a - 97

    Nhưng có một vấn đề ở đây là nếu mọi người đều dùng Unicode sẽ cần khoảng 3 byte để encode tất cả. Điều này hoàn toàn không ổn.

    3. Unicode, UTF-8, UTF16

    Unicode là bảng mã chứa gần như mọi ký tự của hầu hết các ngôn nghữ trên toàn thế giới.

    Xem thêm: thiet ke mang

    UTF-8 là gì?

    UTF-8 là phương thức Encoding rất phổ biến có chức năng mô tả bảng mã Unicode trên bộ nhớ thiết bị.

    Cách encoding như 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
    ....

    [​IMG]

    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**.

    Cứ như vậy cho tới khi mapping hết bảng Unicode.

    Các kí tự dùng ở châu Á hầu hết đuợc biểu diễn ở dạng 2 byte. Tiếng Việt của chúng ta cũng không ngoại lệ.

    UTF16 là gì ?

    Phương thức này cũng gần giống như UTF-8, nhưng nó luôn sử dụng 2 byte để encode cho bảng mã ASCII.

    Ví dụ:
    A - 65 - 0x41 sẽ được encode thành 0x0041
    Á -> 0x00C0 -> sẽ đuợc Encode thành 0x00C0.
    À -> 0x00C1 -> sẽ đuợc Encode thành 0x00C1.

    Như vậy, chúng tôi đã trình bày một số thông tin cơ bản về thông tin bộ mã, cách thức encoding và các phương thức encode thông dụng.

    Nguồn: http://mangvanphong.com/bang-ma-ky-tu-encoding-la-gi/
     

Chia sẻ trang này