基于C#开发中的那些编码问题(详谈)

基于C#开发中的那些编码问题(详谈),第1张

概述最近一直在搞各种编码问题,略有心得,与大家分享一番。System.Text提供了Encoding的抽象类,这个类提供字符串编码的方法。常用的编码方式主要有ASCII,Unicode,UTF8(Unicode编码的一种)。

最近一直在搞各种编码问题,略有心得,与大家分享一番。

System.Text提供了EnCoding的抽象类,这个类提供字符串编码的方法。常用的编码方式主要有ASCII,Unicode,UTF8(Unicode编码的一种)。

Unicode有四种编码格式,UTF-8,UTF-16,UTF-32,UTF-7。

字符编码类,ASCIIEnCoding,UTF7EnCoding,UnicodeEnCoding,UTF32EnCoding。

下面对ASCII和Unicode编码进行对比,废话不说,先上代码:

这是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();  }

运行结果如下:

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

很正常,对吧?但是,如果输入的字符串是中文(或者其他非ASCII表中的字符),情况会怎么样呢?

改变上面的程序代码

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

运行结果如下:

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

如果把编码格式换成UTF8,依然重复上面的测试过程。

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}",integer);   string res = System.Text.EnCoding.UTF8.GetString(tempBytes);   Console.Writeline("Convert Back String:{0}",res);   Console.ReadKey();  }

运行结果如下:

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

通过对比,我们发现除了兼容中文和其他语言外,似乎没有太大区别。如果把编码集换成Unicode,中英文字符编码的不同就会很容易看出来了。

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-00BigInteger:3160918205608148134863399242437668999277801104545742920Convert Back String:Hello World!
Original String:你好,世界!Bytes Array:60-4F-7D-59-0C-FF-16-4E-4C-75-01-FFBigInteger:-307722159543719876182061216Convert Back String:你好,世界!

如果不考虑其他情况。通过对比结果,我们发现:

1、ASCII只能处理英文和英文符号,具体请参考ASCII字符表

2、Unicode可以处理全球所有语言符号

3、Unicode处理英文时,会在每个字节后面加一个字节0x00,比ASCII多出一倍的长度;处理中文时,编码较短。

4、UTF8处理中文时比Unicode编码长,处理英文时与ASCII一样。

结论,由于现在存储介质越来越不值钱,在处理有非英文字符时,编码格式应该选择Unicode(或其子集UTF8等的任意一种编码格式),只有在确定程序只会处理英文的时候,才能选择ASCII编码。

以上这篇基于C#开发中的那些编码问题(详谈)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的基于C#开发中的那些编码问题(详谈)全部内容,希望文章能够帮你解决基于C#开发中的那些编码问题(详谈)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1253796.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存