Encoding 類
表示字元編碼。
名稱空間: System.Text
程式集: mscorlib(在 mscorlib.dll 中)
Encoding 型別公開以下成員。
名稱 | 說明 | |
---|---|---|
ASCII | 獲取 ASCII(7 位)字符集的編碼。 | |
BigEndianUnicode | 獲取使用 Big Endian 位元組順序的 UTF-16 格式的編碼。 | |
BodyName | 在派生類中重寫時,獲取可與郵件代理正文標記一起使用的當前編碼的名稱。 | |
CodePage | 在派生類中重寫時,獲取當前 Encoding 的內碼表識別符號。 | |
DecoderFallback | 獲取或設定當前 Encoding 物件的 DecoderFallback 物件。 | |
Default | 獲取作業系統的當前 ANSI 內碼表的編碼。 | |
EncoderFallback | 獲取或設定當前 Encoding 物件的 EncoderFallback 物件。 | |
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 作業系統內碼表。 |
名稱 | 說明 | |
---|---|---|
Clone | 當在派生類中重寫時,建立當前 Encoding 物件的一個淺表副本。 | |
Convert(Encoding, Encoding, Byte[]) | 將整個位元組陣列從一種編碼轉換為另一種編碼。 | |
Convert(Encoding, Encoding, Byte[], Int32, Int32) | 將位元組陣列內某個範圍的位元組從一種編碼轉換為另一種編碼。 | |
Equals | 確定指定的 Object 是否等於當前例項。 (重寫 Object.Equals(Object)。) | |
Finalize | 允許物件在“垃圾回收”回收之前嘗試釋放資源並執行其他清理操作。 (繼承自 Object。) | |
GetByteCount(Char[]) | 在派生類中重寫時,計算對指定字元陣列中的所有字元進行編碼所產生的位元組數。 | |
GetByteCount(String) | 在派生類中重寫時,計算對指定字串中的字元進行編碼所產生的位元組數。 | |
GetByteCount(Char*, Int32) | 在派生類中重寫時,計算對一組字元(從指定的字元指標處開始)進行編碼所產生的位元組數。 | |
GetByteCount(Char[], Int32, Int32) | 在派生類中重寫時,計算對指定字元陣列中的一組字元進行編碼所產生的位元組數。 | |
GetBytes(Char[]) | 在派生類中重寫時,將指定字元陣列中的所有字元編碼為一個位元組序列。 | |
GetBytes(String) | 在派生類中重寫時,將指定字串中的所有字元編碼為一個位元組序列。 | |
GetBytes(Char[], Int32, Int32) | 在派生類中重寫時,將指定字元陣列中的一組字元編碼為一個位元組序列。 | |
GetBytes(Char*, Int32, Byte*, Int32) | 在派生類中重寫時,將一組字元(從指定的字元指標開始)編碼為一個位元組序列,並從指定的位元組指標開始儲存該位元組序列。 | |
GetBytes(Char[], Int32, Int32, Byte[], Int32) | 在派生類中重寫時,將指定字元陣列中的一組字元編碼為指定的位元組陣列。 | |
GetBytes(String, Int32, Int32, Byte[], Int32) | 在派生類中重寫時,將指定字串中的一組字元編碼為指定的位元組陣列。 | |
GetCharCount(Byte[]) | 在派生類中重寫時,計算對指定位元組陣列中的所有位元組進行解碼所產生的字元數。 | |
GetCharCount(Byte*, Int32) | 在派生類中重寫時,計算對位元組序列(從指定的位元組指標開始)進行解碼所產生的字元數。 | |
GetCharCount(Byte[], Int32, Int32) | 在派生類中重寫時,計算對位元組序列(從指定位元組陣列開始)進行解碼所產生的字元數。 | |
GetChars(Byte[]) | 在派生類中重寫時,將指定位元組陣列中的所有位元組解碼為一組字元。 | |
GetChars(Byte[], Int32, Int32) | 在派生類中重寫時,將指定位元組陣列中的一個位元組序列解碼為一組字元。 | |
GetChars(Byte*, Int32, Char*, Int32) | 在派生類中重寫時,將一個位元組序列(從指定的位元組指標開始)解碼為一組字元,並從指定的字元指標開始儲存該組字元。 | |
GetChars(Byte[], Int32, Int32, Char[], Int32) | 在派生類中重寫時,將指定位元組陣列中的位元組序列解碼為指定的字元陣列。 | |
GetDecoder | 在派生類中重寫時,獲取一個解碼器,該解碼器將已編碼的位元組序列轉換為字元序列。 | |
GetEncoder | 在派生類中重寫時,獲取一個解碼器,該解碼器將 Unicode 字元序列轉換為已編碼的位元組序列。 | |
GetEncoding(Int32) | 返回與指定內碼表識別符號關聯的編碼。 | |
GetEncoding(String) | 返回與指定內碼表名稱關聯的編碼。 | |
GetEncoding(Int32, EncoderFallback, DecoderFallback) | 返回與指定內碼表識別符號關聯的編碼。 引數指定一個錯誤處理程式,用於處理無法編碼的字元和無法解碼的位元組序列。 | |
GetEncoding(String, EncoderFallback, DecoderFallback) | 返回與指定內碼表名稱關聯的編碼。 引數指定一個錯誤處理程式,用於處理無法編碼的字元和無法解碼的位元組序列。 | |
GetEncodings | 返回包含所有編碼的陣列。 | |
GetHashCode | 返回當前例項的雜湊程式碼。 (重寫 Object.GetHashCode()。) | |
GetMaxByteCount | 在派生類中重寫時,計算對指定數目的字元進行編碼所產生的最大位元組數。 | |
GetMaxCharCount | 在派生類中重寫時,計算對指定數目的位元組進行解碼時所產生的最大字元數。 | |
GetPreamble | 在派生類中重寫時,返回指定所用編碼的位元組序列。 | |
GetString(Byte[]) | 在派生類中重寫時,將指定位元組陣列中的所有位元組解碼為一個字串。 | |
GetString(Byte[], Int32, Int32) | 在派生類中重寫時,將指定位元組陣列中的一個位元組序列解碼為一個字串。 | |
GetType | 獲取當前例項的 Type。 (繼承自 Object。) | |
IsAlwaysNormalized() | 使用預設正規化獲取一個值,該值指示當前編碼是否始終被規範化。 | |
IsAlwaysNormalized(NormalizationForm) | 在派生類中重寫時,使用指定正規化獲取一個值,該值指示當前編碼是否始終被規範化。 | |
MemberwiseClone | 建立當前 Object 的淺表副本。 (繼承自 Object。) | |
ToString | 返回表示當前物件的字串。 (繼承自 Object。) |
請注意,Encoding 用於對 Unicode 字元進行操作,而不是對任意二進位制資料(如位元組陣列)進行操作。 如果您的應用程式必須將任意二進位制資料編碼為文字,則該應用程式應使用由 Convert.ToBase64CharArray 之類的方法實現的協議(如 uuencode)。
.NET Framework 提供以下 Encoding 類的實現以支援當前 Unicode 編碼和其他編碼:
-
ASCIIEncoding 將 Unicode 字元編碼為單個 7 位 ASCII 字元。 此編碼僅支援 U+0000 和 U+007F 之間的字元值。 內碼表 20127。 還可通過 ASCII 屬性獲得。
-
UTF7Encoding 使用 UTF-7 編碼對 Unicode 字元進行編碼。 此編碼支援所有 Unicode 字元值。 內碼表 65000。 還可通過 UTF7 屬性獲得。
-
UTF8Encoding 使用 UTF-8 編碼對 Unicode 字元進行編碼。 此編碼支援所有 Unicode 字元值。 內碼表 65001。 還可通過 UTF8 屬性獲得。
-
UnicodeEncoding 使用 UTF-16 編碼對 Unicode 字元進行編碼。 它支援 Little Endian 和 Big Endian 位元組順序。 還可通過 Unicode 屬性和 BigEndianUnicode 屬性獲得。
-
UTF32Encoding 使用 UTF-32 編碼對 Unicode 字元進行編碼。 支援 Little-Endian(內碼表 12000)和 Big-Endian(內碼表 12001)位元組順序。 還可通過 UTF32 屬性獲得。
Encoding 類主要用於在不同的編碼和 Unicode 之間進行轉換。 通常,對於您的應用程式來說,某個派生的 Unicode 類是不錯的選擇。
您的應用程式使用 GetEncoding 方法來獲得其他編碼。 它們應使用 GetEncodings 方法來獲得所有編碼的列表。
下表列出了受支援的編碼以及與這些編碼關聯的內碼表。 最後一列中的星號指示 .NET Framework 本身即支援該內碼表,而不需考慮基礎平臺。
內碼表 |
Name |
顯示名稱 | |
---|---|---|---|
37 |
IBM037 |
IBM EBCDIC(美國 - 加拿大) |
|
437 |
IBM437 |
OEM 美國 |
|
500 |
IBM500 |
IBM EBCDIC(國際) |
|
708 |
ASMO-708 |
阿拉伯字元 (ASMO 708) |
|
720 |
DOS-720 |
阿拉伯字元 (DOS) |
|
737 |
ibm737 |
希臘字元 (DOS) |
|
775 |
ibm775 |
波羅的海字元 (DOS) |
|
850 |
ibm850 |
西歐字元 (DOS) |
|
852 |
ibm852 |
中歐字元 (DOS) |
|
855 |
IBM855 |
OEM 西里爾語 |
|
857 |
ibm857 |
土耳其字元 (DOS) |
|
858 |
IBM00858 |
OEM 多語言拉丁語 I |
|
860 |
IBM860 |
葡萄牙語 (DOS) |
|
861 |
ibm861 |
冰島語 (DOS) |
|
862 |
DOS-862 |
希伯來字元 (DOS) |
|
863 |
IBM863 |
加拿大法語 (DOS) |
|
864 |
IBM864 |
阿拉伯字元 (864) |
|
865 |
IBM865 |
北歐字元 (DOS) |
|
866 |
cp866 |
西里爾字元 (DOS) |
|
869 |
ibm869 |
現代希臘字元 (DOS) |
|
870 |
IBM870 |
IBM EBCDIC(多語言拉丁語 2) |
|
874 |
windows-874 |
泰語 (Windows) |
|
875 |
cp875 |
IBM EBCDIC(現代希臘語) |
|
932 |
shift_jis |
日語 (Shift-JIS) |
|
936 |
gb2312 |
簡體中文 (GB2312) |
* |
949 |
ks_c_5601-1987 |
朝鮮語 |
|
950 |
big5 |
繁體中文 (Big5) |
|
1026 |
IBM1026 |
IBM EBCDIC(土耳其拉丁語 5) |
|
1047 |
IBM01047 |
IBM 拉丁語 1 |
|
1140 |
IBM01140 |
IBM EBCDIC(美國 - 加拿大 - 歐洲) |
|
1141 |
IBM01141 |
IBM EBCDIC(德國 - 歐洲) |
|
1142 |
IBM01142 |
IBM EBCDIC(丹麥 - 挪威 - 歐洲) |
|
1143 |
IBM01143 |
IBM EBCDIC(芬蘭 - 瑞典 - 歐洲) |
|
1144 |
IBM01144 |
IBM EBCDIC(義大利 - 歐洲) |
|
1145 |
IBM01145 |
IBM EBCDIC(西班牙 - 歐洲) |
|
1146 |
IBM01146 |
IBM EBCDIC(英國 - 歐洲) |
|
1147 |
IBM01147 |
IBM EBCDIC(法國 - 歐洲) |
|
1148 |
IBM01148 |
IBM EBCDIC(國際 - 歐洲) |
|
1149 |
IBM01149 |
IBM EBCDIC(冰島語 - 歐洲) |
|
1200 |
utf-16 |
Unicode |
* |
1201 |
unicodeFFFE |
Unicode (Big-Endian) |
* |
1250 |
windows-1250 |
中歐字元 (Windows) |
|
1251 |
windows-1251 |
西里爾字元 (Windows) |
|
1252 |
Windows-1252 |
西歐字元 (Windows) |
* |
1253 |
windows-1253 |
希臘字元 (Windows) |
|
1254 |
windows-1254 |
土耳其字元 (Windows) |
|
1255 |
windows-1255 |
希伯來字元 (Windows) |
|
1256 |
windows-1256 |
阿拉伯字元 (Windows) |
|
1257 |
windows-1257 |
波羅的海字元 (Windows) |
|
1258 |
windows-1258 |
越南字元 (Windows) |
|
1361 |
Johab |
朝鮮語 (Johab) |
|
10000 |
macintosh |
西歐字元 (Mac) |
|
10001 |
x-mac-japanese |
日語 (Mac) |
|
10002 |
x-mac-chinesetrad |
繁體中文 (Mac) |
|
10003 |
x-mac-korean |
朝鮮語 (Mac) |
* |
10004 |
x-mac-arabic |
阿拉伯字元 (Mac) |
|
10005 |
x-mac-hebrew |
希伯來字元 (Mac) |
|
10006 |
x-mac-greek |
希臘字元 (Mac) |
|
10007 |
x-mac-cyrillic |
西里爾字元 (Mac) |
|
10008 |
x-mac-chinesesimp |
簡體中文 (Mac) |
* |
10010 |
x-mac-romanian |
羅馬尼亞語 (Mac) |
|
10017 |
x-mac-ukrainian |
烏克蘭語 (Mac) |
|
10021 |
x-mac-thai |
泰語 (Mac) |
|
10029 |
x-mac-ce |
中歐字元 (Mac) |
|
10079 |
x-mac-icelandic |
冰島語 (Mac) |
|
10081 |
x-mac-turkish |
土耳其字元 (Mac) |
|
10082 |
x-mac-croatian |
克羅埃西亞語 (Mac) |
|
12000 |
utf-32 |
Unicode (UTF-32) |
* |
12001 |
utf-32BE |
Unicode (UTF-32 Big-Endian) |
* |
20000 |
x-Chinese-CNS |
繁體中文 (CNS) |
|
20001 |
x-cp20001 |
TCA 臺灣 |
|
20002 |
x-Chinese-Eten |
繁體中文 (Eten) |
|
20003 |
x-cp20003 |
IBM5550 臺灣 |
|
20004 |
x-cp20004 |
TeleText 臺灣 |
|
20005 |
x-cp20005 |
Wang 臺灣 |
|
20105 |
x-IA5 |
西歐字元 (IA5) |
|
20106 |
x-IA5-German |
德語 (IA5) |
|
20107 |
x-IA5-Swedish |
瑞典語 (IA5) |
|
20108 |
x-IA5-Norwegian |
挪威語 (IA5) |
|
20127 |
us-ascii |
US-ASCII |
* |
20261 |
x-cp20261 |
T.61 |
|
20269 |
x-cp20269 |
ISO-6937 |
|
20273 |
IBM273 |
IBM EBCDIC(德國) |
|
20277 |
IBM277 |
IBM EBCDIC(丹麥 - 挪威) |
|
20278 |
IBM278 |
IBM EBCDIC(芬蘭 - 瑞典) |
|
20280 |
IBM280 |
IBM EBCDIC(義大利) |
|
20284 |
IBM284 |
IBM EBCDIC(西班牙) |
|
20285 |
IBM285 |
IBM EBCDIC(英國) |
|
20290 |
IBM290 |
IBM EBCDIC(日語片假名) |
|
20297 |
IBM297 |
IBM EBCDIC(法國) |
|
20420 |
IBM420 |
IBM EBCDIC(阿拉伯語) |
|
20423 |
IBM423 |
IBM EBCDIC(希臘語) |
|
20424 |
IBM424 |
IBM EBCDIC(希伯來語) |
|
20833 |
x-EBCDIC-KoreanExtended |
IBM EBCDIC(朝鮮語擴充套件) |
|
20838 |
IBM-Thai |
IBM EBCDIC(泰語) |
|
20866 |
koi8-r |
西里爾字元 (KOI8-R) |
|
20871 |
IBM871 |
IBM EBCDIC(冰島語) |
|
20880 |
IBM880 |
IBM EBCDIC(西里爾俄語) |
|
20905 |
IBM905 |
IBM EBCDIC(土耳其語) |
|
20924 |
IBM00924 |
IBM 拉丁語 1 |
|
20932 |
EUC-JP |
日語(JIS 0208-1990 和 0212-1990) |
|
20936 |
x-cp20936 |
簡體中文 (GB2312-80) |
* |
20949 |
x-cp20949 |
朝鮮語 Wansung |
* |
21025 |
cp1025 |
IBM EBCDIC(西里爾塞爾維亞 - 保加利亞語) |
|
21866 |
koi8-u |
西里爾字元 (KOI8-U) |
|
28591 |
iso-8859-1 |
西歐字元 (ISO) |
* |
28592 |
iso-8859-2 |
中歐字元 (ISO) |
|
28593 |
iso-8859-3 |
拉丁語 3 (ISO) |
|
28594 |
iso-8859-4 |
波羅的海字元 (ISO) |
|
28595 |
iso-8859-5 |
西里爾字元 (ISO) |
|
28596 |
iso-8859-6 |
阿拉伯字元 (ISO) |
|
28597 |
iso-8859-7 |
希臘字元 (ISO) |
|
28598 |
iso-8859-8 |
希伯來字元 (ISO-Visual) |
* |
28599 |
iso-8859-9 |
土耳其字元 (ISO) |
|
28603 |
iso-8859-13 |
愛沙尼亞語 (ISO) |
|
28605 |
iso-8859-15 |
拉丁語 9 (ISO) |
|
29001 |
x-Europa |
歐羅巴 |
|
38598 |
iso-8859-8-i |
希伯來字元 (ISO-Logical) |
* |
50220 |
iso-2022-jp |
日語 (JIS) |
* |
50221 |
csISO2022JP |
日語(JIS- 允許 1 位元組假名) |
* |
50222 |
iso-2022-jp |
日語(JIS- 允許 1 位元組假名 - SO/SI) |
* |
50225 |
iso-2022-kr |
朝鮮語 (ISO) |
* |
50227 |
x-cp50227 |
簡體中文 (ISO-2022) |
* |
51932 |
euc-jp |
日語 (EUC) |
* |
51936 |
EUC-CN |
簡體中文 (EUC) |
* |
51949 |
euc-kr |
朝鮮語 (EUC) |
* |
52936 |
hz-gb-2312 |
簡體中文 (HZ) |
* |
54936 |
GB18030 |
簡體中文 (GB18030) |
* |
57002 |
x-iscii-de |
ISCII 梵文 |
* |
57003 |
x-iscii-be |
ISCII 孟加拉語 |
* |
57004 |
x-iscii-ta |
ISCII 泰米爾語 |
* |
57005 |
x-iscii-te |
ISCII 泰盧固語 |
* |
57006 |
x-iscii-as |
ISCII 阿薩姆語 |
* |
57007 |
x-iscii-or |
ISCII 奧裡雅語 |
* |
57008 |
x-iscii-ka |
ISCII 卡納達語 |
* |
57009 |
x-iscii-ma |
ISCII 馬拉雅拉姆字元 |
* |
57010 |
x-iscii-gu |
ISCII 古吉拉特字元 |
* |
57011 |
x-iscii-pa |
ISCII 旁遮普字元 |
* |
65000 |
utf-7 |
Unicode (UTF-7) |
* |
65001 |
utf-8 |
Unicode (UTF-8) |
* |
如果要轉換的資料僅存在於連續塊(如從流中讀取的資料)中,或者如果資料量很大,需要劃分為較小的塊,則應用程式應當使用由某個派生類的 GetDecoder 方法提供的 Decoder 或由該派生類的 GetEncoder 方法提供的 Encoder。
UTF-16 和 UTF-32 編碼器可以使用 Big-Endian 位元組順序(從最高有效位元組開始),也可以使用 Little-Endian 位元組順序(從最低有效位元組開始)。 例如,大寫拉丁字母 A (U+0041) 的序列化結果(十六進位制)如下所示:
-
UTF-16 Big-Endian 位元組順序:00 41
-
UTF-16 Little-Endian 位元組順序:41 00
-
UTF-32 Big-Endian 位元組順序:00 00 00 41
-
UTF-32 Little-Endian 位元組順序:41 00 00 00
通常,使用本機位元組順序儲存 Unicode 字元的效率更高。 例如,在 Little-endian 平臺(如 Intel 計算機)上最好使用 Little-endian 位元組順序。
GetPreamble 方法檢索一個包括位元組順序標記 (BOM) 的位元組陣列。 如果將此位元組陣列作為編碼流的字首,將有助於解碼器識別所用的編碼格式。
有關位元組順序和位元組順序標記的更多資訊,請參見位於 Unicode home page(Unicode 主頁)上的“The Unicode Standard”(Unicode 標準)。
請注意,編碼類允許錯誤進行如下更改:
-
在不提示的情況下更改為“?”字元。
-
使用“最佳匹配”字元。
-
通過將 EncoderFallback 和 DecoderFallback 類與 U+FFFD Unicode 替換字元結合使用來更改為特定於應用程式的行為。
建議讓您的應用程式針對所有的資料流錯誤引發異常。 應用程式要麼在適用時使用“throwonerror”標誌,要麼使用 EncoderExceptionFallback 和 DecoderExceptionFallback 類。 通常不建議使用最佳匹配回退,因為它可能會導致資料丟失或發生衝突,而且比簡單字元替換慢。 對於 ANSI 編碼,最佳匹配行為是預設行為。
注意 |
---|
byte[] 陣列在此示例中是唯一包含編碼資料的型別。 .NET Char 和字串型別是本身 Unicode,因此 GetChars 呼叫將資料再解碼為 Unicode。 |
using System;
using System.Text;
class Example
{
static void Main()
{
string unicodeString = "This string contains the unicode character Pi (\u03a0)";
// Create two different encodings.
Encoding ascii = Encoding.ASCII;
Encoding unicode = Encoding.Unicode;
// Convert the string into a byte array.
byte[] unicodeBytes = unicode.GetBytes(unicodeString);
// Perform the conversion from one encoding to the other.
byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
// Convert the new byte[] into a char[] and then into a string.
char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
string asciiString = new string(asciiChars);
// Display the strings created before and after the conversion.
Console.WriteLine("Original string: {0}", unicodeString);
Console.WriteLine("Ascii converted string: {0}", asciiString);
}
}
// The example displays the following output:
// Original string: This string contains the unicode character Pi (Π)
// Ascii converted string: This string contains the unicode character Pi (?)