最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于C#開(kāi)發(fā)中的那些編碼問(wèn)題(詳談)

 更新時(shí)間:2017年11月22日 10:31:02   作者:龍葛格  
下面小編就為大家分享一篇基于C#開(kāi)發(fā)中的那些編碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

最近一直在搞各種編碼問(wèn)題,略有心得,與大家分享一番。

System.Text提供了Encoding的抽象類(lèi),這個(gè)類(lèi)提供字符串編碼的方法。常用的編碼方式主要有ASCII,Unicode,UTF8(Unicode編碼的一種)。

Unicode有四種編碼格式,UTF-8, UTF-16,UTF-32,UTF-7。

字符編碼類(lèi),ASCIIEncoding ,UTF7Encoding,UnicodeEncoding,UTF32Encoding。

下面對(duì)ASCII和Unicode編碼進(jìn)行對(duì)比,廢話(huà)不說(shuō),先上代碼:

這是ASCII編碼、解碼。

static void Main(string[] args)
  {
   string temp = "Hello World!";
   Console.WriteLine("Original String:{0}", temp);
   
   byte[] tempBytes = System.Text.Encoding.ASCII.GetBytes(temp);
   Console.WriteLine("Bytes Array:{0}", BitConverter.ToString(tempBytes));

   BigInteger integer = new BigInteger(tempBytes);
   Console.WriteLine("BigInteger:{0}", integer);

   string res = System.Text.Encoding.ASCII.GetString(tempBytes);
   Console.WriteLine("Convert Back String:{0}", res);
   Console.ReadKey();
  }

運(yùn)行結(jié)果如下:

Original String:Hello World!
Bytes Array:48-65-6C-6C-6F-20-57-6F-72-6C-64-21
BigInteger:10334410032597741434076685640
Convert Back String:Hello World!

很正常,對(duì)吧?但是,如果輸入的字符串是中文(或者其他非ASCII表中的字符),情況會(huì)怎么樣呢?

改變上面的程序代碼

string temp = "你好,世界!";

運(yùn)行結(jié)果如下:

Original String:你好,世界!
Bytes Array:3F-3F-3F-3F-3F-3F
BigInteger:69540876599103
Convert Back String:??????

如果把編碼格式換成UTF8,依然重復(fù)上面的測(cè)試過(guò)程。

static void Main(string[] args)
  {
   string temp = "你好,世界!";
   Console.WriteLine("Original String:{0}", temp);
   
   byte[] tempBytes = System.Text.Encoding.UTF8.GetBytes(temp);
   Console.WriteLine("Bytes Array:{0}", BitConverter.ToString(tempBytes));

   BigInteger integer = new BigInteger(tempBytes);
   Console.WriteLine("BigInteger:{0}", integer);

   string res = System.Text.Encoding.UTF8.GetString(tempBytes);
   Console.WriteLine("Convert Back String:{0}", res);
   Console.ReadKey();
  }

運(yùn)行結(jié)果如下:

Original String:你好,世界!
Bytes Array:E4-BD-A0-E5-A5-BD-EF-BC-8C-E4-B8-96-E7-95-8C-EF-BC-81
BigInteger:-10998968812899434720462615123889939386679836
Convert Back String:你好,世界!
Original String:Hello World!
Bytes Array:48-65-6C-6C-6F-20-57-6F-72-6C-64-21
BigInteger:10334410032597741434076685640
Convert Back String:Hello World!

通過(guò)對(duì)比,我們發(fā)現(xiàn)除了兼容中文和其他語(yǔ)言外,似乎沒(méi)有太大區(qū)別。如果把編碼集換成Unicode,中英文字符編碼的不同就會(huì)很容易看出來(lái)了。

Original String:Hello World!
Bytes Array:48-00-65-00-6C-00-6C-00-6F-00-20-00-57-00-6F-00-72-00-6C-00-64-00-21-00
BigInteger:3160918205608148134863399242437668999277801104545742920
Convert Back String:Hello World!
Original String:你好,世界!
Bytes Array:60-4F-7D-59-0C-FF-16-4E-4C-75-01-FF
BigInteger:-307722159543719876182061216
Convert Back String:你好,世界!

如果不考慮其他情況。通過(guò)對(duì)比結(jié)果,我們發(fā)現(xiàn):

1、ASCII只能處理英文和英文符號(hào),具體請(qǐng)參考ASCII字符表

2、Unicode可以處理全球所有語(yǔ)言符號(hào)

3、Unicode處理英文時(shí),會(huì)在每個(gè)字節(jié)后面加一個(gè)字節(jié)0x00,比ASCII多出一倍的長(zhǎng)度;處理中文時(shí),編碼較短。

4、UTF8處理中文時(shí)比Unicode編碼長(zhǎng),處理英文時(shí)與ASCII一樣。

結(jié)論,由于現(xiàn)在存儲(chǔ)介質(zhì)越來(lái)越不值錢(qián),在處理有非英文字符時(shí),編碼格式應(yīng)該選擇Unicode(或其子集UTF8等的任意一種編碼格式),只有在確定程序只會(huì)處理英文的時(shí)候,才能選擇ASCII編碼。

以上這篇基于C#開(kāi)發(fā)中的那些編碼問(wèn)題(詳談)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#如何在WinForm中打開(kāi)Excel文件,或打開(kāi)Excel應(yīng)用顯示數(shù)據(jù)

    C#如何在WinForm中打開(kāi)Excel文件,或打開(kāi)Excel應(yīng)用顯示數(shù)據(jù)

    這篇文章詳細(xì)介紹了如何在WinForm中打開(kāi)Excel文件,并提供了相關(guān)的代碼解釋、數(shù)據(jù)插入、單元格格式設(shè)置和頁(yè)面格式設(shè)置的方法
    2024-12-12
  • C#使用Selenium+PhantomJS抓取數(shù)據(jù)

    C#使用Selenium+PhantomJS抓取數(shù)據(jù)

    本文主要介紹了C#使用Selenium+PhantomJS抓取數(shù)據(jù)的方法步驟,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • 解析C#彩色圖像灰度化算法的實(shí)現(xiàn)代碼詳解

    解析C#彩色圖像灰度化算法的實(shí)現(xiàn)代碼詳解

    本篇文章是對(duì)C#中彩色圖像灰度化算法的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#使用Dll的幾種方法示例

    C#使用Dll的幾種方法示例

    使用 DLL(動(dòng)態(tài)鏈接庫(kù))是 C# 開(kāi)發(fā)中常見(jiàn)的任務(wù)之一,DLL 文件包含可以在運(yùn)行時(shí)加載的代碼和數(shù)據(jù),允許程序共享功能和資源,降低程序的內(nèi)存占用并促進(jìn)代碼的復(fù)用,本篇文章將深入探討 C# 中使用 DLL 的多種方法,并提供相關(guān)代碼示例,需要的朋友可以參考下
    2024-10-10
  • VS2012 未找到與約束ContractName匹配的導(dǎo)出

    VS2012 未找到與約束ContractName匹配的導(dǎo)出

    這篇文章主要介紹了在更新的windows補(bǔ)丁后,Visual Studio 用戶(hù)可能無(wú)法打開(kāi)或創(chuàng)建 C++ 或 JavaScript 文件或項(xiàng)目,小編的解決辦法,希望可以幫助到大家
    2018-04-04
  • 一個(gè)可逆加密的類(lèi)(使用3DES加密)

    一個(gè)可逆加密的類(lèi)(使用3DES加密)

    表示三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn)算法的基類(lèi),TripleDES 的所有實(shí)現(xiàn)都必須從此基類(lèi)派生。是從 SymmetricAlgorithm 類(lèi)里繼承出來(lái)。
    2011-07-07
  • c# 用ELMAH日志組件處理異常

    c# 用ELMAH日志組件處理異常

    這篇文章主要介紹了c# 用ELMAH日志組件處理異常,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • C#操作注冊(cè)表之RegistryKey類(lèi)

    C#操作注冊(cè)表之RegistryKey類(lèi)

    這篇文章介紹了C#操作注冊(cè)表之RegistryKey類(lèi),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C# Stack堆棧的使用方法

    C# Stack堆棧的使用方法

    最近打算學(xué)習(xí)下C# Stack堆棧的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2009-01-01
  • C#中DataTable和List互轉(zhuǎn)的示例代碼

    C#中DataTable和List互轉(zhuǎn)的示例代碼

    很多場(chǎng)景下,我們需要將List轉(zhuǎn)換成為DataTable,本文主要介紹了C#中DataTable和List互轉(zhuǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論

辽源市| 都江堰市| 九龙县| 东光县| 诏安县| 项城市| 汽车| 深水埗区| 三江| 乐业县| 海南省| 皮山县| 夏津县| 九龙坡区| 京山县| 越西县| 济阳县| 莱西市| 三河市| 马边| 铁岭市| 广安市| 德化县| 华坪县| 敦化市| 昂仁县| 九龙坡区| 舞阳县| 阿鲁科尔沁旗| 宁南县| 股票| 望江县| 运城市| 麟游县| 吉安市| 珲春市| 金沙县| 冕宁县| 仁布县| 鄂伦春自治旗| 邢台市|