.NET/C#中 System.Text.Encoding 類的一個簡單用法

來源:互聯網
上載者:User

Encoding 是System.Text 命名空間下面的一個類,顧名思義,它是字元編碼相關的一個類。因為在.NET平台上我們最多用的字串,以及字元型都是UNICODE編碼方式的,因此處理對象也多以UNICODE字串為主。

這個類有大概40個方法,具體可查MSDN,其中有5 個是靜態方法可以由 Encoding 類來直接調用,但其實這5個是最不常用的方法:

 

平常更容易看見的卻是:

byte[] byteArray = System.Text.Encoding.Default.GetBytes(  str  );

 

那這個Default 又是什麼東西呢,原來它是 Encoding 類的一個靜態 Property 它的類型仍然是Encoding 類,那這兒莫非是用了個Singlinton模式麼? i dont know...

public static Encoding Default { get; }

所以,上面那些除5個靜態方法以外的方法,就要通過這種方式 System.Text.Encoding.Default.XXXX 來調用。

 

另外同樣,既然能 string 轉 byte[] ,那當然也能byte[] 轉 string 了:

 

string str = System.Text.Encoding.Default.GetString( byteArray );

 

接著看下面的情況:

            string s = "test!";

 

            byte[] byteArray = Encoding.Default.GetBytes(s);

            Console.WriteLine(byteArray.Length);

            foreach (byte b in byteArray)
            {
                Console.WriteLine(b);
            }

 

如上這段代碼,得到BYTE[]的長度是 5 ,我本來想當然地以為會是10呢,因為UNICODE的一個字元編碼要佔兩個位元組,但事實上Length這個屬性輸出的東西是數組的元素個數,並非它的實際位元組長度。

可問題是既然一個UNICODE字元要2個位元組才能儲存,那它的二進位值也必然要大於byte所能容納的一個位元組呀,一一對應的話,如果那個字元的UNICODE值太大,溢出了byte的容納範圍,(眾所周知,byte 的聚會範圍僅是0-255)會怎麼樣呢???????為什麼要將string 類型轉換成 byte[] 呢??????

 

我將上面的string 換了一下:

 

     string s = "我test!";

這次,輸出長度為7!也就是說最前面的這個漢字用了兩個byte來儲存,而後面的仍然是一個字元一個byte。也就是說,一個字串,被轉換成byte[]時,內部進行了最佳化的,避免了不必要的記憶體配置。這點一定要有明確的意識!!!!!!

 

還要進一步注意的是,如果按下面這種方式顯式要求得到一個UNICODE編碼的byte[]的話,得到的就是真正的兩byte一字元的結果了:

 

            Encoding uni = Encoding.Unicode;
            byte[] ba = uni.GetBytes(s);

 

            Console.WriteLine(ba.Length);                   // 這次的結果是 12

            foreach (byte b in ba)
            {
                Console.WriteLine(b);
            }

 

 

對比一下兩次的輸出結果:

 

206
210
116
101
115
116
33

17
98
116
0
101
0
115
0
116
0
33
0

 

還是差異很大呀,不注意估計要出問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.