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

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

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

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

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

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

字符編碼類,ASCIIEncoding ,UTF7Encoding,UnicodeEncoding,UTF32Encoding。

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

這是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è)試過程。

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!

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

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:你好,世界!

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

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

2、Unicode可以處理全球所有語言符號(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ì)越來越不值錢,在處理有非英文字符時(shí),編碼格式應(yīng)該選擇Unicode(或其子集UTF8等的任意一種編碼格式),只有在確定程序只會(huì)處理英文的時(shí)候,才能選擇ASCII編碼。

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

相關(guān)文章

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

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

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

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

    本文主要介紹了C#使用Selenium+PhantomJS抓取數(shù)據(jù)的方法步驟,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    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)鏈接庫)是 C# 開發(fā)中常見的任務(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 用戶可能無法打開或創(chuàng)建 C++ 或 JavaScript 文件或項(xiàng)目,小編的解決辦法,希望可以幫助到大家
    2018-04-04
  • 一個(gè)可逆加密的類(使用3DES加密)

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

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

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

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

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

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

    C# Stack堆棧的使用方法

    最近打算學(xué)習(xí)下C# Stack堆棧的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論

嫩江县| 正安县| 平和县| 梨树县| 绥滨县| 东宁县| 天津市| 金昌市| 黔江区| 马鞍山市| 上思县| 芒康县| 江门市| 永兴县| 建始县| 营口市| 文山县| 上栗县| 吐鲁番市| 沅陵县| 调兵山市| 拉萨市| 通江县| 忻州市| 揭东县| 明光市| 泽库县| 长武县| 新民市| 宜都市| 石楼县| 临邑县| 临江市| 汝州市| 华宁县| 抚宁县| 常山县| 涪陵区| 贵德县| 宜兰市| 天镇县|