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



我目前正在使用字节为单位的Unicode,并使用编码类来获取字节和获取字符串。

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

以下是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

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

最新更新