52.C# Encoding字符編碼類

摘要


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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末福压,一起剝皮案震驚了整個(gè)濱河市掏秩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荆姆,老刑警劉巖蒙幻,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異胆筒,居然都是意外死亡邮破,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)仆救,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抒和,“玉大人,你說(shuō)我怎么就攤上這事彤蔽〈菝В” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我撤缴,道長(zhǎng)州藕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘受裹。我一直安慰自己,他們只是感情好虏束,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布棉饶。 她就那樣靜靜地躺著,像睡著了一般镇匀。 火紅的嫁衣襯著肌膚如雪照藻。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天汗侵,我揣著相機(jī)與錄音幸缕,去河邊找鬼。 笑死晰韵,一個(gè)胖子當(dāng)著我的面吹牛发乔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雪猪,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼栏尚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了只恨?” 一聲冷哼從身側(cè)響起译仗,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抬虽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后古劲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體斥赋,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年产艾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滑绒。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闷堡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疑故,到底是詐尸還是另有隱情杠览,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布纵势,位于F島的核電站踱阿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏钦铁。R本人自食惡果不足惜软舌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望牛曹。 院中可真熱鬧佛点,春花似錦、人聲如沸黎比。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阅虫。三九已至演闭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颓帝,已是汗流浹背米碰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躲履,地道東北人见间。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像工猜,于是被迫代替她去往敵國(guó)和親米诉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 摘要 C# 中的 Math 類是一個(gè)非常有用的類篷帅,它提供了許多數(shù)學(xué)計(jì)算所需的基本功能史侣,例如加法拴泌、減法、乘法惊橱、除法蚪腐、...
    技術(shù)老小子閱讀 313評(píng)論 0 0
  • 0、獲取輸入?yún)?shù)的實(shí)際名稱 使用nameof 1税朴、枚舉的轉(zhuǎn)換 2回季、C#判斷對(duì)象類型 3、用反射動(dòng)態(tài)綁定控件事件 容...
    宅玖蔡閱讀 1,024評(píng)論 0 0
  • .NET .NET 平臺(tái)是一個(gè)開(kāi)發(fā)框架正林,支持多種編程語(yǔ)言泡一,用于構(gòu)建各種類型的應(yīng)用程序,包括桌面應(yīng)用觅廓、Web 應(yīng)用鼻忠、...
    三千闌干閱讀 152評(píng)論 0 0
  • 摘要 C#中的Random類是一種用于生成偽隨機(jī)數(shù)的類,它可以產(chǎn)生滿足某些隨機(jī)性統(tǒng)計(jì)要求的數(shù)字序列杈绸。隨機(jī)性是計(jì)算機(jī)...
    技術(shù)老小子閱讀 55評(píng)論 0 0
  • 吐槽 寫(xiě)代碼如果要保護(hù)代碼,首先做窗體程序我就不怎么考慮c#,但是使用其它編程語(yǔ)言寫(xiě)門(mén)檻稍微高一些, 有時(shí)候?yàn)榱藢?xiě)...
    吉兇以情遷閱讀 1,521評(píng)論 8 0