52.C# Encoding字符編碼類

摘要


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);

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 摘要 C# 中的 Math 類是一個非常有用的類,它提供了許多數學計算所需的基本功能,例如加法、減法、乘法、除法、...
    技術老小子閱讀 385評論 0 0
  • 0、獲取輸入參數的實際名稱 使用nameof 1、枚舉的轉換 2、C#判斷對象類型 3、用反射動態綁定控件事件 容...
    宅玖蔡閱讀 1,064評論 0 0
  • .NET .NET 平臺是一個開發框架,支持多種編程語言,用于構建各種類型的應用程序,包括桌面應用、Web 應用、...
    三千闌干閱讀 189評論 0 0
  • 摘要 C#中的Random類是一種用于生成偽隨機數的類,它可以產生滿足某些隨機性統計要求的數字序列。隨機性是計算機...
    技術老小子閱讀 65評論 0 0
  • 吐槽 寫代碼如果要保護代碼,首先做窗體程序我就不怎么考慮c#,但是使用其它編程語言寫門檻稍微高一些, 有時候為了寫...
    吉兇以情遷閱讀 1,614評論 8 0