字符集及編碼

2021-09-22 09:20:37 字數 1673 閱讀 5271

字符集(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 =""

;strings =

"message,資訊";

byte

b =encoding.utf8.getbytes(s);

//byte b = encoding.unicode.getbytes(s);

//byte b = encoding.getencoding("gb2312").getbytes(s);

foreach

(byte

i inb)

result的值為「109,101,115,115,97,103,101,44,228,191,161,230,129,175」me

ssag

e,資訊

utf-8

109101

115115

97103

10144

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

109101

115115

97103

10144

208,197

207,162

從位元組陣列到字元的轉換

byte

b =newbyte

;strings =

encoding.utf8.getstring(b);

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

字符集 編碼

字符集概念 1 字符集 可以表示的字元和字元對應計算機位元組碼的對映 2 字元編碼方式 計算機中用來表示和傳輸如前所述字符集中對映的位元組碼的編碼方式。對於ascii和gb2312等字符集,他們在傳輸和計算機表示時的位元組碼不用編碼,直接用字元對應的位元組碼表示。但比如unicode 字符集,就有多...

字符集編碼

喬哥 小萌,聽說你去面試了,怎麼樣啊?小萌 哎 喬哥,你給我講講什麼是字符集和編碼唄,ascii,utf 8,utf 16,utf 32又是啥?喬哥 好的,在搞懂字符集先來講講什麼是編碼吧 在計算機底層,比如說你的名字 小萌 在計算機中並不是文字的形式,而是一串二進位制數字,如 0110011001...

字符集編碼

references 字元編碼中ascii unicode和utf 8的區別 ascii碼 unicode編碼 utf 8編碼的區別 條目ascii unicode utf 8 占用byte數 12,不常用的字元占用4個 變長的編碼方式,將乙個unicode字元編碼成1 6個字元。常用的英文本母被編...