我需要能够获取可能具有字节顺序标记 (BOM) 的任意文本输入来标记其编码,并将其输出为 ASCII。我们有一些不了解 BOM 的旧工具,我需要向它们发送纯 ASCII 数据。
现在,我刚刚写完这段代码,我简直不敢相信这里的低效率。数据的四个副本,更不用说 StreamReader 内部的任何中间缓冲区。有一个更好的方法吗?
// i_fileBytes is an incoming byte[]
string unicodeString = new StreamReader(new MemoryStream(i_fileBytes)).ReadToEnd();
byte[] unicodeBytes = Encoding.Unicode.GetBytes(unicodeString.ToCharArray());
byte[] ansiBytes = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, unicodeBytes);
string ansiString = Encoding.ASCII.GetString(ansiBytes);
我需要 StreamReader() 因为它有一个内部 BOM 检测器来选择编码来读取文件的其余部分。然后剩下的就是让它转换成最终的 ASCII 字符串。
有一个更好的方法吗?