有关Frameworx如何执行Encoding.Convert方法的问题

时间:2011-09-12 16:00:46

标签: .net string encoding bytearray

我最近一直试图阅读有关字符串和编码的所有内容的工作原理。

我的问题是这个方法:

public static byte[] Convert(
Encoding srcEncoding,
Encoding dstEncoding,
byte[] bytes
)

幕后实际发生了什么,是使用StringBuilder检查每个字符,然后根据指定的编码替换它们还是什么?

1 个答案:

答案 0 :(得分:0)

我希望它有效地

string text = srcEncoding.GetString(bytes);
return destEncoding.GetBytes(text);

现在它可以以更高效的内存方式完成它 - 但实际上它需要解码原始二进制数据并将其再次编码为另一种编码中的二进制数据。

请注意,在逐个字符的基础上执行编码并不总是有效 - 例如,一个UTF-8字节序列可能会解码为单个Unicode代码点,表示为UTF-16代码单元的代理对( char值)。使用Encoder和解码器pair would allow "chunks" of data to be encoded/decoded at a time, removing the need for the whole text data to be in memory at one time... possibly writing to a MemoryStream`或类似的东西来存储编码数据。