【发布时间】:2008-11-21 18:41:38
【问题描述】:
我需要能够接受可能带有字节顺序标记 (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字符串。
有没有更好的方法来做到这一点?
【问题讨论】: