C#Text.Encoder和Text.Encoding有什么区别

Eds*_* Ho 7 c# unicode encoding encoder

我目前使用Unicode的字节和使用Encoding类来获取字节和获取字符串.

但是,我看到有一个编码器类,它似乎与编码类做同样的事情.有谁知道它们之间的区别以及何时使用它们中的任何一个.

以下是Microsoft文档页面:

编码器:https://msdn.microsoft.com/en-us/library/system.text.encoder(v= vs.110) .aspx

编码:https://msdn.microsoft.com/en-us/library/system.text.encoding(v= vs.110) .aspx

Mik*_*ray 7

肯定有区别.An Encoding是一种将字符序列转换为字节的算法,反之亦然.An Encoder是一个有状态的对象,它将字符序列转换为字节.要获取一个Encoder对象,通常会调用GetEncoderEncoding对象.为什么有必要进行有状态转换?想象一下,您正在尝试有效地编码长字符序列.您希望避免创建大量数组或一个巨大的数组.所以你将字符分解成可重复使用的1K字符缓冲区.然而,这可能会产生一些非法的字符序列,例如utf-16代理对断开来分别调用GetBytes.该Encoder对象知道如何处理它并在连续调用之间保存必要的状态GetBytes.因此,您使用a Encoder来转换一个自包含的文本块.我相信只要flush在最后一个字符数组中调用GetBytes 等于true,就可以重复使用Encoder实例对文本的多个部分进行更多转换.如果您只想轻松编码短字符串,请使用这些Encoding.GetBytes方法.对于解码操作,存在类似的解码器类,其保持解码状态.