摘要
C#編程語言中,Encoding
類是一個非常重要的類,它用于將字符串從一種編碼轉換為另一種編碼。字符串是C#編程語言中的一個基本數據類型,它由一系列字符組成,而這些字符可以用不同的編碼表示。因此,當我們需要將一個字符串從一種編碼轉換為另一種編碼時,就需要使用Encoding
類。
正文
常用屬性
ASCII | 獲取 ASCII(7 位)字符集的編碼。 |
BigEndianUnicode | 獲取使用 Big Endian 字節順序的 UTF-16 格式的編碼。 |
BodyName | 在派生類中重寫時,獲取可與郵件代理正文標記一起使用的當前編碼的名稱。 |
CodePage | 在派生類中重寫時,獲取當前 Encoding 的代碼頁標識符。 |
DecoderFallback | 獲取或設置當前 DecoderFallback 對象的 Encoding 對象。 |
Default | 獲取此 .NET 實現的默認編碼。 |
EncoderFallback | 獲取或設置當前 EncoderFallback 對象的 Encoding 對象。 |
EncodingName | 在派生類中重寫時,獲取當前編碼的用戶可讀說明。 |
HeaderName | 在派生類中重寫時,獲取可與郵件代理頭標記一起使用的當前編碼的名稱。 |
IsBrowserDisplay | 在派生類中重寫時,獲取一個值,該值指示瀏覽器客戶端是否可以使用當前的編碼顯示內容。 |
IsBrowserSave | 在派生類中重寫時,獲取一個值,該值指示瀏覽器客戶端是否可以使用當前的編碼保存內容。 |
IsMailNewsDisplay | 在派生類中重寫時,獲取一個值,該值指示郵件和新聞客戶端是否可以使用當前的編碼顯示內容。 |
IsMailNewsSave | 在派生類中重寫時,獲取一個值,該值指示郵件和新聞客戶端是否可以使用當前的編碼保存內容。 |
IsReadOnly | 在派生類中重寫時,獲取一個值,該值指示當前的編碼是否為只讀。 |
IsSingleByte | 在派生類中重寫時,獲取一個值,該值指示當前的編碼是否使用單字節碼位。 |
Latin1 | 獲取 Latin1 字符集 (ISO-8859-1) 的編碼。 |
Unicode | 獲取使用 Little-Endian 字節順序的 UTF-16 格式的編碼。 |
UTF32 | 獲取使用 Little-Endian 字節順序的 UTF-32 格式的編碼。 |
UTF7 | 已過時。 獲取 UTF-7 格式的編碼。 |
UTF8 | 獲取 UTF-8 格式的編碼。 |
方法
Convert(Encoding, Encoding, Byte[]) | 將整個字節數組從一種編碼轉換為另一種編碼。 |
Convert(Encoding, Encoding, Byte[], Int32, Int32) | 將字節數組內某個范圍的字節從一種編碼轉換為另一種編碼。 |
GetByteCount(Char*, Int32) | 在派生類中重寫時,計算對一組字符(從指定的字符指針處開始)進行編碼所產生的字節數。 |
GetByteCount(ReadOnlySpan<Char>) | 在派生類中重寫時,計算對指定字符范圍的字符進行編碼所產生的字節數。 |
GetByteCount(String) | 在派生類中重寫時,計算對指定字符串中的字符進行編碼所產生的字節數。 |
GetBytes(Char, Int32, Byte, Int32) | 在派生類中重寫時,將一組字符(從指定的字符指針開始)編碼為一個字節序列,并從指定的字節指針開始存儲該字節序列。 |
GetBytes(Char[]) | 在派生類中重寫時,將指定字符數組中的所有字符編碼為一個字節序列。 |
GetBytes(String) | 在派生類中重寫時,將指定字符串中的所有字符編碼為一個字節序列。 |
GetBytes(String, Int32, Int32) | 在派生類中重寫時,從指定的 index 開始,將指定字符串中由 count 指定的字符數編碼為字節數組。 |
GetBytes(String, Int32, Int32, Byte[], Int32) | 在派生類中重寫時,將指定字符串中的一組字符編碼為指定的字節數組。 |
GetChars(Byte[], Int32, Int32, Char[], Int32) | 在派生類中重寫時,將指定字節數組中的字節序列解碼為指定的字符數組。 |
GetChars(ReadOnlySpan<Byte>, Span<Char>) | 在派生類中重寫時,將指定只讀字節范圍中的所有字節解碼為字符范圍。 |
GetDecoder() | 在派生類中重寫時,獲取一個解碼器,該解碼器將已編碼的字節序列轉換為字符序列。 |
GetEncoder() | 在派生類中重寫時,獲取一個解碼器,該解碼器將 Unicode 字符序列轉換為已編碼的字節序列。 |
GetEncoding(Int32) | 返回與指定代碼頁標識符關聯的編碼。 |
GetEncoding(Int32, EncoderFallback, DecoderFallback) | 返回與指定代碼頁標識符關聯的編碼。 參數指定一個錯誤處理程序,用于處理無法編碼的字符和無法解碼的字節序列。 |
GetEncoding(String) | 返回與指定代碼頁名稱關聯的編碼。 |
GetEncoding(String, EncoderFallback, DecoderFallback) | 返回與指定代碼頁名稱關聯的編碼。 參數指定一個錯誤處理程序,用于處理無法編碼的字符和無法解碼的字節序列。 |
GetEncodings() | 返回包含所有編碼的數組。 |
GetHashCode() | 返回當前實例的哈希代碼。 |
擴展方法
GetBytes(Encoding, ReadOnlySequence<Char>) | 使用指定的 Encoding 將指定的 ReadOnlySequence<T> 編碼到 Byte 數組中。 |
GetChars(Encoding, ReadOnlySequence<Byte>, IBufferWriter<Char>) | 使用指定的 Encoding 將指定的 ReadOnlySequence<T> 解碼為 char ,并將結果寫入 writer 。 |
GetString(Encoding, ReadOnlySequence<Byte>) | 使用指定的 Encoding 將指定的 ReadOnlySeque |
通過GetBytes()可以把一個字符串或者是字符串數組轉換成字節
string str = "這是一個測試";
byte[] bytes = Encoding.Unicode.GetBytes(str);
通過GetChars()可以將字節數組轉換成字符
string str = "這是一個測試";
byte[] bytes = Encoding.Unicode.GetBytes(str);
char[] a = Encoding.Unicode.GetChars(bytes);
Console.WriteLine(a);
將漢字轉換成GB2312互轉
在.net下直接使用GB2312會出錯
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("這是一個測試");
//字節數組從一種編碼轉換為另一種編碼
byte[] tobytes = Encoding.Convert(fromEcoding, toEcoding, fromBytes);
var str = toEcoding.GetString(tobytes);//將字節數組解碼成字符串
Console.WriteLine(str);