之前做公司项目的时候,对于C#编码这块总是一知半解,所以打算通过这篇笔记对C#编码(Encoding)进行彻底的扫盲,关于编码和字符集的基础知识,请参考字符集和字符编码(Charset & Encoding),看完这篇文章之后,来看本文会更加的轻松。
1、Encoding
(1)、如何生成一个Encoding即一种编码
Encoding位于System.Text命名空间下,是一个抽象类,它的派生类如下图:
要实例化一个Encoding一共有以下两种方式:
a、通过实例化它的派生类,然后通过里式转换实例化一个Encoding,代码如下:
Encoding e=new UTF8Encoding();
b、通过Encoding的静态属性ASCII,Unicode,UTF32,UTF7,UTF8,Default来生成,代码如下:
Encoding e = Encoding.UTF8;
其实b中的静态属性无非是new了一个a中的派生类,有图为证
注:上面通过静态属性生成的Encoding实例,符合单例模式,但是并不适用在多线程环境下,所以当你的Encoding需要全局唯一时,请使用静态属性的方式,而不是通过new的方式。
(2)Encoding.Default
注意(1)中b,Encoding的静态属性中有一个Default,它没有对应的派生类,但是它返回的也是一个Encoding对象,至于返回那种语言的Encoding,取决于取决于你电脑里-->控制面板->区域和语言 里面的设置,也就是ANSI,比如我的电脑设置的是中文,那么对应的就是gb2312,但是如果你的代码不止在一个国家使用,那么就不要使用Encoding.Default,这样会造成乱码,最好使用Encoding.UTF8.
2、如何调用常用编码之外的编码,通过GetEncoding()和GetEncodings()
上面介绍了ASCII,Unicode,UTF32,UTF7,UTF8常规的5中编码方式,但是有一些编码如gb2312就没有对应的派生类,那么获取这类语言对应的Encoding只能通过GetEncoding()和GetEncodings()方法来获取
(1)、GetEncodings()
通过GetEncodings()可以获取所有的编码,代码如下:
EncodingInfo[] infos = Encoding.GetEncodings();
目前为止一共有140种,通过GetEncodings()方法你可以方便的查看所有语言的编码信息,个人开发了一个简单窗体应用程序,来查询不同的编码信息。点击下载
(2)、GetEncoding()
通过这个方法可以获取指定语言的Encoding,当然你必须给出一个codePage或者是name,代码如下:
Encoding ei=Encoding.GetEncoding(936); Console.WriteLine(ei.WebName);