DECODE LÀ GÌ

     
thanhphodong.vn share mọi vật dụng về trò chơi / ứng dụng / Thủ Thuật dành cho máy tính với mọi tin hay tuyệt nhất và số đông thông tin kỹ năng hỏi đáp.

Làm rõ những khái niệm cơ bản

Chắc rằng toàn bộ mọi bạn đều biết về vấn đề này ở một mức độ nào đó, nhưng thiếu hiểu biết nhiều sao những kiến thức và kỹ năng đó lại bị mất đi trong những cuộc tranh biện về văn bản, nên trước tiên hãy nói lại một chút: máy vi tính không thể nào tàng trữ được “chữ”, “số”, “ảnh”, hay bất cứ thứ gì khác. đồ vật duy nhất mà nó rất có thể lưu được và thao tác cùng chính là bit. Một bit chỉ rất có thể có 2 giá chỉ trị: có hoặc không, đúng hoặc sai, 1 hoặc 0, mình muốn gọi theo cách nào cũng được. Vày máy tính hoạt động bằng điện, một bit thực chất rất có thể được thể hiện bởi điện áp, xung bây giờ hoặc trạng thái điện của mạch flip-flop. Đối với nhỏ người, bit thường được thể hiện bằng 1 với 0 nên hãy coi đấy là quy ước trong suốt bài viết này.

Bạn đang xem: Decode là gì

Đang xem: Decode là gì

Để cần sử dụng bit để mô tả cho bất kể thứ gì, chúng ta cần các quy tắc. Họ cần phải biến đổi một chuỗi các bit thành thứ gì đó như chữ, số và ảnh bằng cách sử dụng một encoding scheme (lược thiết bị mã hóa), hoặc gọi tắt là encoding. Như vậy này:

01100010 01101001 01110100 01110011b i t sTrong encoding này, 01100010 thay mặt đại diện cho chữ “b”, 01101001 đến chữ “i”, 01110100 đến chữ “t” và 01110011 mang lại chữ “s”. Một chuỗi những bit một mực sẽ đại diện thay mặt cho một chữ với một chữ sẽ đại diện cho một chuỗi các bit duy nhất định. Nếu bạn có trí nhớ giỏi để ghi nhớ được chuỗi bit mang đến 26 chữ thì bạn có thể đọc bit như xem sách vậy.

Encoding scheme bên trên được điện thoại tư vấn là ASCII. Một chuỗi những số 1 với 0 được chia nhỏ ra thành những phần, từng phần 8 bit (hoặc 1 byte). ASCII điều khoản một bảng để dịch trường đoản cú byte sang chữ cái mà con người rất có thể đọc được. Sau đây là một phần nhỏ của bảng đó:

bitscharacter
01000001A
01000010B
01000011C
01000100D
01000101E
01000110F

Có tổng số 95 ký tự có thể đọc được cơ chế trong bảng ASCII, bao hàm chữ từ bỏ A mang đến Z ngơi nghỉ trạng thái thường cùng in hoa, số từ bỏ 0 mang lại 9, một số dấu chấm câu và những ký trường đoản cú như đồng đô la, vết chấm than và một vài trang bị khác. Nó cũng bao gồm 33 giá trị cho một số trong những thứ như dấu cách, dấu xuống dòng, tab, backspace,… đa số thứ này tất nhiên không thể in ra được, cơ mà cũng vẫn hữu hình ở một số trong những dạng và có ích trực tiếp với bé người. Một vài quý hiếm thì chỉ bổ ích với sản phẩm tính, như mã để tiến công dấu bắt đầu và ngừng của văn bản. Tộng cộng tất cả 128 ký kết tự được có mang trong encoding ASCII, đó là 1 con số rất đẹp (với số đông người rất gần gũi với đồ vật tính), bởi vì nó thực hiện hết tất cả các kết hợp hoàn toàn có thể của 7 bit (0000000 cho đến 1111111).

Và tiếng thì bọn họ đã có phương pháp để thể hiện tại văn phiên bản chỉ bởi việc sử dụng 1 và 0:

01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100 “Hello World”Thuật ngữ quan liêu trọngĐể encode một thứ gì đó bằng ASCII, làm theo bảng từ đề xuất qua trái, sửa chữa các chữ bằng các bit. Để decode một chuỗi các bit thành các ký tự có thể đọc được, tuân theo bảng trường đoản cú trái qua phải, thay thế các bit bởi chữ.

Encode nghĩa là sử dụng một thứ gì đó để biểu đạt cho một thiết bị khác. Encoding là 1 trong tập hợp các quy tắc để thực hiện việc đổi khác đó.

Một số thuật ngữ khác cần được thiết kế rõ trong văn cảnh này:

character set, charset

Tập hợp các ký tự rất có thể được encode. “Mã hóa ASCII gồm 1 bộ ký kết tự bao gồm 128 ký kết tự.” Về cơ phiên bản thì đồng nghĩa với “encoding”.

code page

Một “trang” các mã nhằm liên kết những ký từ với một chuỗi các bit tương ứng. Cũng rất có thể hiểu là 1 trong “bảng”. Về cơ bạn dạng thì đồng nghĩa với “encoding”.

string

Một string là một vài các yếu tố được xâu lại cùng với nhau. Một chuỗi bit là một loạt những bit, như 01010011. Một chuỗi ký tự là một loạt những ký tự, như thế này. Đồng nghĩa với “sequence”.

Binary, Octal, Decimal, Hex

Có khôn xiết nhiều cách để viết một số. 10011111 vào hệ nhị phân là 237 trong hệ chén bát phân, 159 trong hệ thập phân và 9F trong hệ thập lục phân. Chúng đều diễn đạt một giá trị, tuy vậy số thập lục phân lại gọn gàng hơn cùng dễ đọc hơn so với số nhị phân. Mặc dù vậy tôi sẽ cần sử dụng nhị phân vào suốt nội dung bài viết này để làm vấn đề trở nên dễ nắm bắt hơn cũng giống như loại hạn chế được một tờ trừu tượng. Đừng lo nếu như khách hàng thấy nơi đâu đó những mã cam kết tự lại được viết ngơi nghỉ hệ không giống nhé, chúng hệt nhau cả thôi.

Excusez-Moi?

Sau lúc đã nắm vững những ý trên rồi thì cùng thú thật với nhau nào: 95 ký tự là quá ít khi họ nói về những ngôn ngữ. Nó có thể áp dụng đến tiếng Anh cơ bản, nhưng sẽ cố gắng nào nếu chúng ta muốn viết một risqué letter (thư báo đen đủi ro) bằng tiếng Pháp? Straßen­übergangs­änderungs­gesetz (luật mặt đường bộ) trong giờ đồng hồ Đức? Một lời mời mang lại tiệc smörgåsbord (tiệc đứng) bởi tiếng Thụy Điển? Ờm, chúng ta không thể. Ko thể bởi ASCII. Không tồn tại một hướng dẫn nào cho việc thể hiện những chữ như é, ß, ü, ä, ö or å trong ASCII, nên bọn họ không thể cần sử dụng nó được.

Xem thêm: Xem Ngày Tốt Trong Tháng 3 Âm Năm 2021, Xem Ngày Tốt Tháng 3 Năm 2021

“Nhưng chú ý xem,” dân châu Âu nói, “trong một cái máy tính thông dụng với một byte bằng 8 bit, mã hóa ASCII đang làm tổn phí phạm hẳn 1 bit khi luôn luôn set giá chỉ trị của nó là 0! bạn có thể dùng bit này nhằm nhét thêm tận 128 quý giá vào cái bảng đó!” cùng họ đã có tác dụng như vậy. Nhưng của cả thế, có không ít hơn 128 phương pháp để đặt dấu cho một nguyên âm. Chúng ta không thể nào gửi hết tất cả các biến hóa thể của chữ cái được dùng trong các ngôn ngữ của toàn Châu Âu vào trong cùng một bảng với tối đa 256 quý giá được. Và kế tiếp thế giới chìm chìm trong một biển những encoding, các tiêu chuẩn, những tiêu chuẩn chỉnh thực tế và thậm chí còn là… nửa tiêu chuẩn để dùng cho các bộ ký kết tự không giống nhau. Một bạn nào đó cần phải viết một văn phiên bản về giờ Thụy Điển bởi tiếng Séc, tìm đâu thấy encoding làm sao áp dụng cho cả 2 ngôn ngữ này đề nghị đành từ bỏ chế ra một cái. Cùng chuyện đó ra mắt hàng nghìn lần.

Và cũng hãy nhớ là tiếng Nga, tiếng Ấn Độ, giờ đồng hồ Ả Rập, tiếng vày Thái, giờ Hàn và hàng chục ngàn ngôn ngữ khác đang rất được dùng bên trên trái đất. Chưa kể các ngôn ngữ đã mất được cần sử dụng nữa. Một khi bạn đã giải được việc làm cố gắng nào để viết nhiều ngữ điệu trong cùng một văn bạn dạng với các thứ giờ đồng hồ trên, hãy thử thách bản thân bằng tiếng Trung. Hoặc giờ Nhật. Cả 2 ngôn ngữ này đựng cả chục nghìn cam kết tự. Chúng ta có tối đa 256 quý giá trong một byte chứa 8 bit. Triển!

Mã hóa đa byte (Multi-Byte Encodings)

Để tạo nên một bảng liên kết các ký trường đoản cú với chữ cái cho một ngôn ngữ có rất nhiều hơn 256 ký tự, một byte đơn giản và dễ dàng là không đủ. Với 2 byte (16 bit), chúng ta có thể mã hóa cho tới 65,536 ký tự không giống nhau. BIG-5 là 1 trong encoding thực hiện cách đó. Cầm vì bóc tách một chuỗi những bit thành block 8, nó bóc tách thành block 16 với có một cái bảng to con (ý tôi là, KHỔNG LỒ) quy định việc ký tự làm sao thì link cùng chuỗi bit nào. BIG-5 sống thể đơn giản và dễ dàng nhất đang xử lý đa số các ký kết tự của tiếng Trung phồn thể. GB18030 là 1 trong những encoding khác cũng có cách tiếp cận tương tự, mà lại nó bao hàm cả tiếng Trung giản thể cùng phồn thể luôn. Và trước khi chúng ta hỏi, thì đúng vậy, có cả các encoding không giống chỉ dành cho tiếng Trung giản thể thôi. Tôi chỉ ao ước dùng 1 encoding thôi cơ mà cũng khó khăn thế sao?

Dưới trên đây là 1 phần nhỏ của bảng mã hóa GB18030:

bitscharacter
10000001 01000000
10000001 01000001
10000001 01000010
10000001 01000011
10000001 01000100

GB18030 cách xử trí một lượng lớn các ký trường đoản cú (bao bao gồm cả đa số các ký kết tự La tinh), mặc dù nhiên cuối cùng thì nó cũng chỉ là 1 trong định dạng mã hóa chuyên biệt trong hàng hà sa số những cái không giống thôi.

Sự hoảng loạn mang tên Unicode

Cuối cùng thì cũng đều có người chịu đựng hết nổi cùng đã đứng lên tạo ra một chuẩn chỉnh mã hóa để hợp nhất toàn bộ các chuẩn khác. Chuẩn này được điện thoại tư vấn là Unicode. Về cơ phiên bản nó tư tưởng một bảng lớn cực đại với 1,114,112 các code point rất có thể được cần sử dụng cho phần đông loại chữ cái và biểu tượng. Nó quá đủ nhằm mã hóa tổng thể tiếng châu Âu, Trung Đông, Viễn Đông, miền Nam, miền Bắc, miền Tây, lịch sử từ trước và cả những ngôn ngữ tương lai mà lại con fan chưa nghĩ về ra. Thực hiện Unicode, bạn có thể soạn văn bạn dạng chứa gần như mọi ngôn ngữ bằng phần nhiều ký tự mà chúng ta có thể gõ ra. Điều này hay là bất khả thi hoặc khôn xiết rất cực nhọc để thực hiện trước lúc Unicode ra đời. Thậm chí còn tồn tại một mục không thiết yếu thức dành riêng cho tiếng Klingon (Star Trek) trong Unicode. Chúng ta thấy đó, Unicode phệ đến nỗi nó cũng có thể chấp nhận được dùng vào mục đích cá nhân luôn.

*

Vậy thì Unicode thực hiện bao nhiêu bit nhằm mã hóa toàn bộ các ký tự đó? 0. Cũng chính vì Unicode chưa hẳn một nhiều loại mã hóa (encoding).

Bối rối? những người dường như như vậy. Đầu tiên, Unicode quan niệm ra một bảng chứa các code point cho những ký tự. Nghe có vẻ gian nguy vậy thôi, nó tương tự như là nói “65 đại diện cho A, 66 cho B cùng 9,731 đến ☃” (thật đấy). Làm cụ nào mà những code point này được mã trở thành bit thì lại là 1 trong câu chuyện khác. Để chứa 1,114,112 cực hiếm khác nhau, 2 byte là không đủ. 3 byte thì đủ, dẫu vậy chả ai cần sử dụng 3 byte cả, nên cuối cùng 4 byte đã có chọn. Nhưng, trừ khi chúng ta dùng giờ đồng hồ Trung hoặc những thứ tiếng không giống với một lượng lớn các ký trường đoản cú mà bắt buộc nhiều bit để mã hóa, bạn sẽ chẳng bao giờ dùng hết phần nhiều 4 byte đó cả. Trường hợp chữ “A” luôn luôn được mã trở thành 00000000 00000000 00000000 01000001, “B” thì thành 00000000 00000000 00000000 01000010,.. Hồ hết văn bản sẽ có form size tăng lên 4 lần so với size thực.

Để tối ưu hóa vấn đề này, tất cả rất nhiều phương pháp để mã hóa code point thành bit. UTF-32 là một trong những encoding có tác dụng mã hóa các code point thực hiện 32 bit. Nghĩa là, 4 byte trên một cam kết tự. Nó rất đối chọi giản, tuy thế thường thì chiếm size quá lớn. UTF-16 với UTF-8 là 2 một số loại mã hóa đa chiều dài. Giả dụ một ký kết tự có thể được mã hóa bởi 1 byte (bởi vày code point của chính nó là một trong những rất nhỏ), UTF-8 sẽ mã hóa nó bằng 1 byte. Nếu ký kết tự bắt buộc tới 2 byte, nó vẫn mã hóa bằng 2 byte, vân vân. Khi giải thuật (decode), byte đầu tiên trong chuỗi sẽ tiến hành sử dụng để khẳng định số byte cấu trúc thành cam kết tự, chũm thể:

Chuỗi ban đầu bằng chủng loại bit “0” (0x00-0x7f) => chuỗi lâu năm 1 byte.Chuỗi bước đầu bằng mẫu bit “110” (0xc0-0xdf) => chuỗi dài 2 byte.Chuỗi bước đầu bằng chủng loại bit “1110” (0xe0-0xef) => chuỗi dài 3 byte.Chuỗi ban đầu bằng mẫu mã bit “11110” (0xf0-0xf7) => chuỗi dài 4 byte.

Việc áp dụng bit bao gồm trọng số tối đa (MSB) làm cho tín hiệu thông báo độ dài chuỗi rất có thể giúp giảm hao tốn bộ nhớ, tuy vậy vẫn sẽ tốn hèn nếu được dùng quá thường xuyên. UTF-16 thì cân bằng hơn, dùng tối thiểu 2 byte, sẽ tăng lên tới 4 byte ví như cần.

*

Và đó là tất cả về Unicode. Unicode là một bảng to với mục tiêu liên kết những ký từ bỏ với những số và các loại mã hoá UTF khác biệt thì chỉ định cách thức mà số đông số này được mã hoá thành bit. Về cơ bản, Unicode cũng chỉ là một trong trong những encoding scheme và không tồn tại gì quan trọng đặc biệt về nó nước ngoài trừ việc nó nỗ lực để xử lý đông đảo thứ trong lúc vẫn hoạt động một cách hiệu quả mà thôi. Cùng đó là 1 trong điều khôn cùng tốt.™

Code Points

Các cam kết tự được thể hiện trải qua “code point” của nó. Code point được viết bên dưới hệ thập lục phân (để khiến cho nó ngắn hơn), được bắt đầu bằng “U+” (không có ý nghĩa sâu sắc gì ngoài bài toán ám chỉ đây là một code point của Unicode). Ví dụ, ký kết tự Ḁ tất cả code point là U+1E00. Theo cách nói khác, nó là ký kết tự số 7680 của bảng Unicode. Tên thường gọi chính thức của chính nó là “LATIN CAPITAL LETTER A WITH RING BELOW” (Chữ la tinh viết hoa A cùng với vòng tròn sống dưới).

*

Dài quá, ngại đọc

Một chút bắt tắt những ý trên: hồ hết ký tự rất có thể được mã hoá thành nhiều chuỗi bit khác nhau và bất chứ chuỗi bit như thế nào cũng rất có thể thể hiện các ký tự không giống nhau, tuỳ trực thuộc vào loại mã hoá nào được dùng để làm viết chúng ra. Lí do đơn giản và dễ dàng chỉ vì các mã hoá khác biệt thì thực hiện số bit khác biệt với mỗi ký kết tự và những giá trị khác nhau thì thể hiện các ký tự khác nhau.

Xem thêm: Campylobacter Là Gì - Campylobacter And Related Infections

*

(Hết phần 1)

Bài viết được dịch tự What Every Programmer Absolutely, Positively Needs khổng lồ Know About Encodings and Character Sets to Work With Text.