一、概念
我們知道計算機是基于二進制來表示資料的,對于字母和漢字等字符用二進制如何表示?這就需要一種編碼方式將這些字母或者符號轉換二進制表示,首先需要對字符集進行編碼表示,每個編碼代表一個固定的字符,然后再將字符的編碼轉換成二進制表示,
計算機常用字符的編碼主要分為兩種:Unicode碼與ASCII碼,
二、Unicode
Unicode 是一種標準的編碼系統,可以用于幾乎所有語言的字符的編碼,Unicode的出現是因為ASCII等其他編碼不能適應更多的字符編碼需求,
每個字符使用 0 和 0x10FFFF 之間的唯一整數碼位進行編碼,而其中編碼就是一個將一組 Unicode 字符轉換為一個位元組序列的程序,
2.1 編碼方式
Unicode 標準為所有字符都分配一個碼位,其中Unicode 轉換格式 (UTF) 是一種碼位編碼方式,有三種編碼方式,如下所示:
UTF-8,它將每個碼位表示為一個由 1 至 4 個位元組組成的序列,極少數用4~6個位元組存盤,它的規則如下: 1)對于單位元組的符號,位元組的第一位設為0,后面7位為這個符號的unicode碼, 2)對于n位元組的符號(n>1),第一個位元組的前n位都設為1,第n+1位設為0,后面位元組的前兩位一律設為10,剩下的沒有提及的二進制位,全部為這個符號的unicode碼,
在C#中,System.Text.Encoding.Unicode與System.Text.Encoding.UTF8的區別:Windows默認的Unicode實作是UTF-16,所以C#中Encoding.Unicode就是UTF-16,與UTF8不同,
UTF-16,介于 UTF-8 和 UTF-32 之間,使用 2 個或者 4 個位元組來存盤,長度既固定又可變,UTF-16是磁區定義的,每個區可以存放 65536 個字符,為1個平面,共有17個平面,分為基本平面BMP 和輔助平面SMP,常見的字符都在BMP中,
UTF-32,一種固定長度的編碼方案,不管字符編號大小,始終使用 4 個位元組來存盤,
中文對應的Unicode編碼見:http://www.chi2ko.com/tool/CJK.htm
BOM(Byte Order Mark)是用來區分位元組序列和編碼方式的(UTF-8,UTF-16,UTF-32),
三、 ASCII
ASCII(American Standard Code for Information Interchange,美國資訊互換標準代碼)是一套基于拉丁字母的字符編碼,
我們都知道,一個位元組由8位二進制數構成,所以1個位元組共有2的8次方種組合,如果每一種方式可以表示一個字符的話,那么1位元組可以表示256個字符,ASCII 碼就是描述英文字符和8 位二進制數的對應關系,
ASCII 碼對照表定義了 128 個字符,包含 33 個控制字符和 95 個可顯示字符,
ASCII 碼對照表
徹底弄懂 Unicode 編碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282620.html
標籤:其他
