6.2. Encoding

Encoding:ICloneable

System.Text abstract class Encoding:ICloneable
封装了char[] 和byte[] 在不同的编码中转换的细节

abstract method

1. public abstract int GetByteCount(char[] chars, int index, int count);
    //计算对指定字符数组中的一组字符进行编码所产生的字节数
2. public abstract int GetCharCount(byte[] bytes, int index, int count);
    //计算对字节序列(从指定字节数组开始)进行解码所产生的字符数。

3. public abstract int GetBytes(char[] chars, int charIndex, int charCount,
        byte[] bytes, int byteIndex);
    //将指定字符数组中的一组字符编码为指定的字节数组
4. public abstract int GetChars(byte[] bytes, int byteIndex, int byteCount,
                                   char[] chars, int charIndex);
    //将指定字节数组中的字节序列解码为指定的字符数组

5. public abstract int GetMaxByteCount(int charCount); //计算对指定数目的字符进行编码所产生的最大字节数
6. public abstract int GetMaxCharCount(int byteCount); //计算对指定数目的字节进行解码时所产生的最大字符数

GetBytes(),GetChars()

这两个abstract方法,或则他们的重载方式的virtual方法,本质都是调用这两个abstract方法
而所有不同的编码方案又分别实现了这两个方法,就实现了char[] 到byte[] 在不同编码方案中的实现

string和char[]的转换时很简单的所以,也就完成了string到char[] 的转换

我觉得编码转化应该是先得到string,然后得到新编码后的byte[],再得到新编码后的string,虽然看到的内容可能是一样的,但是存储的文件大小或者说string的大小是不同的,不同的utf编码之间最重要的区别是占用的大小

GetString

GetString 其实是先得到char[],然后调用new string() 得到的,本质上是得到char[]

GetEncodings()-> EncodingInfo[]

在.net core 1.1中还没有这个方法
EncodingInfo实例每一个都有一个GetEncoding(),可以用来遍历所有的编码方案,虽然好像编程的时候一般没什么用吧

Child class

12 个子类,12种编码
    ASCIIEncoding
    UTF7Encoding
    UTF8Encoding
    UnicodeEncoding
    UTF32Encoding
    DBCSCodePageEncoding
    EUCJPEncoding
    GB18030Encoding
    ISCIIEncoding
    ISO2022Encoding
    Latin1Encoding
    SBCSCodePageEncoding
这就是
原文地址:https://www.cnblogs.com/zhangrCsharp/p/7695583.html