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