3

我试图将字节数组转换为字符串。字节数组包含一个前导码(如果使用的编码器有其中之一),如果字节数组中没有存储前导码,您必须指定默认编码。

我的代码看起来像这样

public static string ArrayToStringUsingPreambleOrDefaultEncoder(byte[] bytes, Encoding defaultEncoder, out Encoding usedEncoder) {
  using (var mem = new MemoryStream(bytes))
  using (var reader = new StreamReader(mem, defaultEncoder, true)) {
    string result = reader.ReadToEnd();
    usedEncoder = reader.CurrentEncoding;
    return result;
  }
}

但它并没有像我预期的那样奏效。如果未找到前导码,如何使 StreamReader 使用前导码指定的编码或默认编码。我是否真的必须手动将所有已知编码器的前导码与数组的开头进行比较才能找到正确的编码器?

4

1 回答 1

2

MSDN:“StreamReader 专为特定编码的字符输入而设计”。所以是的,你确实需要从序言中找出正确的编码来做到这一点。这里有一个示例方法:

http://www.personalmicrocosms.com/Pages/dotnettips.aspx?c=15&t=17

编辑:以上链接已损坏,但旧页面可在 Wayback Machine Internet Archive 中找到: https ://web.archive.org/web/20090203034127/http://www.personalmicrocosms.com/Pages/dotnettips.aspx?c =15&t=17 *

于 2009-12-18T14:19:07.110 回答