摘要
C#編程語(yǔ)言中述雾,Encoding
類是一個(gè)非常重要的類奶卓,它用于將字符串從一種編碼轉(zhuǎn)換為另一種編碼评甜。字符串是C#編程語(yǔ)言中的一個(gè)基本數(shù)據(jù)類型活尊,它由一系列字符組成隶校,而這些字符可以用不同的編碼表示。因此蛹锰,當(dāng)我們需要將一個(gè)字符串從一種編碼轉(zhuǎn)換為另一種編碼時(shí)深胳,就需要使用Encoding
類。
正文
常用屬性
ASCII | 獲取 ASCII(7 位)字符集的編碼铜犬。 |
BigEndianUnicode | 獲取使用 Big Endian 字節(jié)順序的 UTF-16 格式的編碼舞终。 |
BodyName | 在派生類中重寫(xiě)時(shí)轻庆,獲取可與郵件代理正文標(biāo)記一起使用的當(dāng)前編碼的名稱。 |
CodePage | 在派生類中重寫(xiě)時(shí)敛劝,獲取當(dāng)前 Encoding 的代碼頁(yè)標(biāo)識(shí)符余爆。 |
DecoderFallback | 獲取或設(shè)置當(dāng)前 DecoderFallback 對(duì)象的 Encoding 對(duì)象。 |
Default | 獲取此 .NET 實(shí)現(xiàn)的默認(rèn)編碼夸盟。 |
EncoderFallback | 獲取或設(shè)置當(dāng)前 EncoderFallback 對(duì)象的 Encoding 對(duì)象蛾方。 |
EncodingName | 在派生類中重寫(xiě)時(shí),獲取當(dāng)前編碼的用戶可讀說(shuō)明满俗。 |
HeaderName | 在派生類中重寫(xiě)時(shí)转捕,獲取可與郵件代理頭標(biāo)記一起使用的當(dāng)前編碼的名稱。 |
IsBrowserDisplay | 在派生類中重寫(xiě)時(shí)唆垃,獲取一個(gè)值五芝,該值指示瀏覽器客戶端是否可以使用當(dāng)前的編碼顯示內(nèi)容。 |
IsBrowserSave | 在派生類中重寫(xiě)時(shí)辕万,獲取一個(gè)值枢步,該值指示瀏覽器客戶端是否可以使用當(dāng)前的編碼保存內(nèi)容。 |
IsMailNewsDisplay | 在派生類中重寫(xiě)時(shí)渐尿,獲取一個(gè)值醉途,該值指示郵件和新聞客戶端是否可以使用當(dāng)前的編碼顯示內(nèi)容。 |
IsMailNewsSave | 在派生類中重寫(xiě)時(shí)砖茸,獲取一個(gè)值隘擎,該值指示郵件和新聞客戶端是否可以使用當(dāng)前的編碼保存內(nèi)容。 |
IsReadOnly | 在派生類中重寫(xiě)時(shí)凉夯,獲取一個(gè)值货葬,該值指示當(dāng)前的編碼是否為只讀。 |
IsSingleByte | 在派生類中重寫(xiě)時(shí)劲够,獲取一個(gè)值震桶,該值指示當(dāng)前的編碼是否使用單字節(jié)碼位。 |
Latin1 | 獲取 Latin1 字符集 (ISO-8859-1) 的編碼征绎。 |
Unicode | 獲取使用 Little-Endian 字節(jié)順序的 UTF-16 格式的編碼蹲姐。 |
UTF32 | 獲取使用 Little-Endian 字節(jié)順序的 UTF-32 格式的編碼。 |
UTF7 | 已過(guò)時(shí)人柿。 獲取 UTF-7 格式的編碼柴墩。 |
UTF8 | 獲取 UTF-8 格式的編碼。 |
方法
Convert(Encoding, Encoding, Byte[]) | 將整個(gè)字節(jié)數(shù)組從一種編碼轉(zhuǎn)換為另一種編碼凫岖。 |
Convert(Encoding, Encoding, Byte[], Int32, Int32) | 將字節(jié)數(shù)組內(nèi)某個(gè)范圍的字節(jié)從一種編碼轉(zhuǎn)換為另一種編碼拐邪。 |
GetByteCount(Char*, Int32) | 在派生類中重寫(xiě)時(shí),計(jì)算對(duì)一組字符(從指定的字符指針處開(kāi)始)進(jìn)行編碼所產(chǎn)生的字節(jié)數(shù)隘截。 |
GetByteCount(ReadOnlySpan<Char>) | 在派生類中重寫(xiě)時(shí)扎阶,計(jì)算對(duì)指定字符范圍的字符進(jìn)行編碼所產(chǎn)生的字節(jié)數(shù)。 |
GetByteCount(String) | 在派生類中重寫(xiě)時(shí)婶芭,計(jì)算對(duì)指定字符串中的字符進(jìn)行編碼所產(chǎn)生的字節(jié)數(shù)东臀。 |
GetBytes(Char, Int32, Byte, Int32) | 在派生類中重寫(xiě)時(shí),將一組字符(從指定的字符指針開(kāi)始)編碼為一個(gè)字節(jié)序列犀农,并從指定的字節(jié)指針開(kāi)始存儲(chǔ)該字節(jié)序列惰赋。 |
GetBytes(Char[]) | 在派生類中重寫(xiě)時(shí),將指定字符數(shù)組中的所有字符編碼為一個(gè)字節(jié)序列呵哨。 |
GetBytes(String) | 在派生類中重寫(xiě)時(shí)赁濒,將指定字符串中的所有字符編碼為一個(gè)字節(jié)序列。 |
GetBytes(String, Int32, Int32) | 在派生類中重寫(xiě)時(shí)孟害,從指定的 index 開(kāi)始拒炎,將指定字符串中由 count 指定的字符數(shù)編碼為字節(jié)數(shù)組。 |
GetBytes(String, Int32, Int32, Byte[], Int32) | 在派生類中重寫(xiě)時(shí)挨务,將指定字符串中的一組字符編碼為指定的字節(jié)數(shù)組击你。 |
GetChars(Byte[], Int32, Int32, Char[], Int32) | 在派生類中重寫(xiě)時(shí),將指定字節(jié)數(shù)組中的字節(jié)序列解碼為指定的字符數(shù)組谎柄。 |
GetChars(ReadOnlySpan<Byte>, Span<Char>) | 在派生類中重寫(xiě)時(shí)丁侄,將指定只讀字節(jié)范圍中的所有字節(jié)解碼為字符范圍。 |
GetDecoder() | 在派生類中重寫(xiě)時(shí)朝巫,獲取一個(gè)解碼器鸿摇,該解碼器將已編碼的字節(jié)序列轉(zhuǎn)換為字符序列。 |
GetEncoder() | 在派生類中重寫(xiě)時(shí)劈猿,獲取一個(gè)解碼器拙吉,該解碼器將 Unicode 字符序列轉(zhuǎn)換為已編碼的字節(jié)序列。 |
GetEncoding(Int32) | 返回與指定代碼頁(yè)標(biāo)識(shí)符關(guān)聯(lián)的編碼糙臼。 |
GetEncoding(Int32, EncoderFallback, DecoderFallback) | 返回與指定代碼頁(yè)標(biāo)識(shí)符關(guān)聯(lián)的編碼庐镐。 參數(shù)指定一個(gè)錯(cuò)誤處理程序,用于處理無(wú)法編碼的字符和無(wú)法解碼的字節(jié)序列变逃。 |
GetEncoding(String) | 返回與指定代碼頁(yè)名稱關(guān)聯(lián)的編碼必逆。 |
GetEncoding(String, EncoderFallback, DecoderFallback) | 返回與指定代碼頁(yè)名稱關(guān)聯(lián)的編碼。 參數(shù)指定一個(gè)錯(cuò)誤處理程序揽乱,用于處理無(wú)法編碼的字符和無(wú)法解碼的字節(jié)序列名眉。 |
GetEncodings() | 返回包含所有編碼的數(shù)組。 |
GetHashCode() | 返回當(dāng)前實(shí)例的哈希代碼凰棉。 |
擴(kuò)展方法
GetBytes(Encoding, ReadOnlySequence<Char>) | 使用指定的 Encoding 將指定的 ReadOnlySequence<T> 編碼到 Byte 數(shù)組中损拢。 |
GetChars(Encoding, ReadOnlySequence<Byte>, IBufferWriter<Char>) | 使用指定的 Encoding 將指定的 ReadOnlySequence<T> 解碼為 char ,并將結(jié)果寫(xiě)入 writer 撒犀。 |
GetString(Encoding, ReadOnlySequence<Byte>) | 使用指定的 Encoding 將指定的 ReadOnlySeque |
通過(guò)GetBytes()可以把一個(gè)字符串或者是字符串?dāng)?shù)組轉(zhuǎn)換成字節(jié)
string str = "這是一個(gè)測(cè)試";
byte[] bytes = Encoding.Unicode.GetBytes(str);
通過(guò)GetChars()可以將字節(jié)數(shù)組轉(zhuǎn)換成字符
string str = "這是一個(gè)測(cè)試";
byte[] bytes = Encoding.Unicode.GetBytes(str);
char[] a = Encoding.Unicode.GetChars(bytes);
Console.WriteLine(a);
將漢字轉(zhuǎn)換成GB2312互轉(zhuǎn)
在.net下直接使用GB2312會(huì)出錯(cuò)
System.ArgumentException: ''gb2312' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')'
在.net下需要先nuget安裝System.Text.Encoding.CodePages
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding fromEcoding = Encoding.GetEncoding("UTF-8");//返回utf-8的編碼
Encoding toEcoding = Encoding.GetEncoding("gb2312");
byte[] fromBytes = fromEcoding.GetBytes("這是一個(gè)測(cè)試");
//字節(jié)數(shù)組從一種編碼轉(zhuǎn)換為另一種編碼
byte[] tobytes = Encoding.Convert(fromEcoding, toEcoding, fromBytes);
var str = toEcoding.GetString(tobytes);//將字節(jié)數(shù)組解碼成字符串
Console.WriteLine(str);