.net 为什么不是';我的编码器不是';StreamReader不会调用它吗?

.net 为什么不是';我的编码器不是';StreamReader不会调用它吗?,.net,encoding,streamreader,.net,Encoding,Streamreader,我正在编写一个自定义编码器,以基于Asciencoding对模糊文件进行解码。字符长度仅为1字节。我只实现了最少数量的方法,即GetChars和GetChars,因为我觉得它们是唯一需要的两个。不幸的是,我的编码器没有被StreamReader调用,即使CurrentEncoding引用了它。我有什么遗漏吗 using System.Globalization; using System.IO; using System.Text; public class Program { pub

我正在编写一个自定义编码器,以基于Asciencoding对模糊文件进行解码。字符长度仅为1字节。我只实现了最少数量的方法,即GetChars和GetChars,因为我觉得它们是唯一需要的两个。不幸的是,我的编码器没有被StreamReader调用,即使CurrentEncoding引用了它。我有什么遗漏吗

using System.Globalization;
using System.IO;
using System.Text;

public class Program
{
    public static void Main()
    {
        byte[] bytes = {0x23, 0xe2, 0x63, 0x28};
        var bytesAsString = string.Empty;
        var myEncoder = new CaliperFileEncoding();
        using (var streamReader = new StreamReader(new MemoryStream(bytes), new CaliperFileEncoding()))
        {
            string line = null;
            do
            {
                line = streamReader.ReadLine();
                bytesAsString += line;
            }
            while (line != null);
            Console.WriteLine("The encoding used was {0}.", streamReader.CurrentEncoding);
            Console.WriteLine();
        }
    }
}

public class CaliperFileEncoding : ASCIIEncoding
{
    public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)
    {
        Console.WriteLine("Why am I not being called? Was it something I said?");
        for (var i = 0; i < byteCount; i++)
        {
            chars[charIndex + i] = GetChar(bytes[byteIndex + i]);
        }

        return byteCount;
    }

    private static char GetChar(byte b)
    {
        if (b == (byte)'\r' || b == (byte)'\n' || b == (byte)0)
            return System.Convert.ToChar(b);
        int c = (sbyte)b;
        sbyte x = (sbyte)~(((c >> 2) & 'v') | ('z' << 6));
        return System.Convert.ToChar(x);
    }
}
使用系统全球化;
使用System.IO;
使用系统文本;
公共课程
{
公共静态void Main()
{
字节[]字节={0x23,0xe2,0x63,0x28};
var byteassString=string.Empty;
var myEncoder=新的CaliperFileEncoding();
使用(var streamReader=newstreamreader(新内存流(字节),新CaliperFileEncoding())
{
字符串行=null;
做
{
line=streamReader.ReadLine();
字节串+=行;
}
while(line!=null);
WriteLine(“使用的编码是{0}.”,streamReader.CurrentEncoding);
Console.WriteLine();
}
}
}
公共类CalipPerFileEncoding:AscienceCodeing
{
公共覆盖int GetChars(字节[]字节,int byteIndex,int byteCount,char[]字符,int charIndex)
{
WriteLine(“为什么我没被叫来?是我说了什么吗?”);
for(var i=0;i>2)和v')|('z'