字元集及編碼

來源:互聯網
上載者:User

字元集(CharSet)編碼不同,資料的儲存空間大小也不同,選擇不當還會出現亂碼等,特別是資料互動的地方,發送與接收應該保持編碼一致。

ASCII碼是最早最基礎的編碼,採用7位(bit)表示一個字元,一共可表示2的7次方=128種字元,後來有了Latin1(ISO-8859-1)對ASCII進行了擴充,使用8位(bit)也就是一個位元組表示一個字元,可表示2的8次方=256種字元,相比ASCII可以表示更多的特殊字元,但對於一些地區,如中文這樣字元遠遠不夠,為瞭解決這種問題,Unicode編碼出現了,旨在能表示所有地區的字元,針對特定的地區還有針對性的編碼,如中文的gb2312等。

 

Unicode編碼使用兩個位元組表示一個字元,可表示2的16次方=65536個字元,當一份文檔中的字元大多是英文或純英文時,使用Unicode就顯得有點浪費空間。而utf-8編碼可以解決此類問題,它遇到英文時使用同ASCII編碼,但遇到如中文字元時,一個字元用3個位元組來表示。而gb2312遇到中文用2個位元組來表示。

 

.NET中的位於System.Text下的Encoding類是各種編碼的核心類,提供了位元組數組與字元之間的轉換,及各種編碼間的轉換,Encoding類定義如下:

public abstract class Encoding : ICloneable

 

Encoding類的衍生類別有ASCIIEncoding,UnicodeEncoding,UTF8Encoding類等,提供不同特定編碼的覆寫。

 

下面以字元“message,資訊”(英文,半形逗號,中文)為例,來看看各編碼的表示

 

string result = "";
string s = "message,資訊";
byte[] b = Encoding.UTF8.GetBytes(s);
//byte[] b = Encoding.Unicode.GetBytes(s);
//byte[] b = Encoding.GetEncoding("gb2312").GetBytes(s);
foreach (byte i in b)
{
result += i.ToString() + ",";
}

 

 

result的值為“109,101,115,115,97,103,101,44,228,191,161,230,129,175”

  m e s s a g e , 信 息
utf-8 109 101 115 115 97 103 101 44 228,191,161 230,129,175
unicode 109,0 101,0 115,0 115,0 97,0 103,0 101,0 44,0 225,79 111,96
gb2312 109 101 115 115 97 103 101 44 208,197 207,162

從位元組數組到字元的轉換

 

byte[] b = new byte[] { 109, 101, 115, 115, 97, 103, 101, 44, 228, 191, 161, 230, 129, 175 };
string s = Encoding.UTF8.GetString(b);

s的值為“message,資訊”。位元組數組是utf-8的編碼,如果採用gb2312來GetString,則得到的中文字元會是亂碼:message,淇℃伅

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.