我目前使用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

最佳答案

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

关于c# - C#Text.Encoder和Text.Encoding有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44508854/

10-09 00:41