CSharp-Encoding編碼
在網絡通信中,很多情況下都是將字符信息轉成字節序列進行傳輸。將字符序列轉為字節序列的過程稱為編碼。當這些字節傳送到接收方,接收方需要逆向將字節序列轉為字符序列。這個過程就是解碼。
常見編碼有ASCII字符集 ,非ASCII字符集 如GB2312 GB18030等,Unicode字符集。
在C#中,字符集默認是Unicode,一個英文占2個字節,一個漢字也占2個字節。Unicode能夠表示大部分國家的文字,但是空間占用相對ASCII較為浪費。
為了節約空間,后續出現了UTF-8,UTF-16,UTF-32.
UTF8是使用最為廣泛的一種UTF格式。屬于Unicode的一種變長字符編碼,一般使用1-4個字節編碼表示一個Unicode字符,即將一個Unicode字符編為1-4個字節組成的UTF8格式,根據不同符號而變化字節長度。
UTF8字節序列在所有系統中都一樣的,所以這樣可以很容易的進行排序。
UTF16將每個碼位表示為一個由1-2個16位整數組成的序列。
UTF32將每個碼位表示為一個32位整數。
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 ? ?在派生類中重寫時,獲取一個值,該值指示當前的編碼是否使用單字節碼位。Unicode ? ?獲取使用 Little-Endian 字節順序的 UTF-16 格式的編碼。UTF32 ? ?獲取使用 Little-Endian 字節順序的 UTF-32 格式的編碼。UTF7 ? ?獲取 UTF-7 格式的編碼。UTF8 ? ?獲取 UTF-8 格式的編碼。WebName ? ?在派生類中重寫時,獲取在 Internet 編號分配管理機構 (IANA) 注冊的當前編碼的名稱。WindowsCodePage ? ?在派生類中重寫時,獲取與當前編碼最緊密對應的 Windows 操作系統代碼頁。
? ??
Encoding編碼方法
? ? Clone() ? ?當在派生類中重寫時,創建當前 Encoding 對象的一個卷影副本。Convert(Encoding, Encoding, Byte[]) ? ?將整個字節數組從一種編碼轉換為另一種編碼。Convert(Encoding, Encoding, Byte[], Int32, Int32) ? ?將字節數組內某個范圍的字節從一種編碼轉換為另一種編碼。Equals(Object) ? ?確定指定的 Object 是否等同于當前實例。GetByteCount(Char*, Int32) ? ?在派生類中重寫時,計算對一組字符(從指定的字符指針處開始)進行編碼所產生的字節數。GetByteCount(Char[]) ? ?在派生類中重寫時,計算對指定字符數組中的所有字符進行編碼所產生的字節數。GetByteCount(Char[], Int32, Int32) ? ?在派生類中重寫時,計算對指定字符數組中的一組字符進行編碼所產生的字節數。GetByteCount(String) ? ?在派生類中重寫時,計算對指定字符串中的字符進行編碼所產生的字節數。GetBytes(Char*, Int32, Byte*, Int32) ? ?在派生類中重寫時,將一組字符(從指定的字符指針開始)編碼為一個字節序列,并從指定的字節指針開始存儲該字節序列。GetBytes(Char[]) ? ?在派生類中重寫時,將指定字符數組中的所有字符編碼為一個字節序列。GetBytes(Char[], Int32, Int32) ? ?在派生類中重寫時,將指定字符數組中的一組字符編碼為一個字節序列。GetBytes(Char[], Int32, Int32, Byte[], Int32) ? ?在派生類中重寫時,將指定字符數組中的一組字符編碼為指定的字節數組。GetBytes(String) ? ?在派生類中重寫時,將指定字符串中的所有字符編碼為一個字節序列。GetBytes(String, Int32, Int32, Byte[], Int32) ? ?在派生類中重寫時,將指定字符串中的一組字符編碼為指定的字節數組。GetCharCount(Byte*, Int32) ? ?在派生類中重寫時,計算對字節序列(從指定的字節指針開始)進行解碼所產生的字符數。GetCharCount(Byte[]) ? ?在派生類中重寫時,計算對指定字節數組中的所有字節進行解碼所產生的字符數。GetCharCount(Byte[], Int32, Int32) ? ?在派生類中重寫時,計算對字節序列(從指定字節數組開始)進行解碼所產生的字符數。GetChars(Byte*, Int32, Char*, Int32) ? ?在派生類中重寫時,將一個字節序列(從指定的字節指針開始)解碼為一組字符,并從指定的字符指針開始存儲該組字符。GetChars(Byte[]) ? ?在派生類中重寫時,將指定字節數組中的所有字節解碼為一組字符。GetChars(Byte[], Int32, Int32) ? ?在派生類中重寫時,將指定字節數組中的一個字節序列解碼為一組字符。GetChars(Byte[], Int32, Int32, Char[], Int32) ? ?在派生類中重寫時,將指定字節數組中的字節序列解碼為指定的字符數組。GetDecoder() ? ?在派生類中重寫時,獲取一個解碼器,該解碼器將已編碼的字節序列轉換為字符序列。GetEncoder() ? ?在派生類中重寫時,獲取一個解碼器,該解碼器將 Unicode 字符序列轉換為已編碼的字節序列。GetEncoding(Int32) ? ?返回與指定代碼頁標識符關聯的編碼。GetEncoding(Int32, EncoderFallback, DecoderFallback) ? ?返回與指定代碼頁標識符關聯的編碼。 參數指定一個錯誤處理程序,用于處理無法編碼的字符和無法解碼的字節序列。GetEncoding(String) ? ?返回與指定代碼頁名稱關聯的編碼。GetEncoding(String, EncoderFallback, DecoderFallback) ? ?返回與指定代碼頁名稱關聯的編碼。 參數指定一個錯誤處理程序,用于處理無法編碼的字符和無法解碼的字節序列。GetEncodings() ? ?返回包含所有編碼的數組。GetHashCode() ? ?返回當前實例的哈希代碼。GetMaxByteCount(Int32) ? ?在派生類中重寫時,計算對指定數目的字符進行編碼所產生的最大字節數。GetMaxCharCount(Int32) ? ?在派生類中重寫時,計算對指定數目的字節進行解碼時所產生的最大字符數。GetPreamble() ? ?在派生類中重寫時,返回指定所用編碼的字節序列。GetString(Byte*, Int32) ? ?在派生類中重寫時,將在指定地址開始的指定字節數解碼為字符串。GetString(Byte[]) ? ?在派生類中重寫時,將指定字節數組中的所有字節解碼為一個字符串。GetString(Byte[], Int32, Int32) ? ?在派生類中重寫時,將指定字節數組中的一個字節序列解碼為一個字符串。GetType() ? ?獲取當前實例的 Type。IsAlwaysNormalized() ? ?使用默認范式獲取一個值,該值指示當前編碼是否始終被規范化。IsAlwaysNormalized(NormalizationForm) ? ?在派生類中重寫時,使用指定范式獲取一個值,該值指示當前編碼是否始終被規范化。MemberwiseClone() ? ?創建當前 Object 的淺表副本。RegisterProvider(EncodingProvider) ? ?注冊編碼提供程序。ToString() ? ?返回表示當前對象的字符串。