C#使用前导码或默认编码将字节数组转换为字符串

时间:2009-12-18 14:12:37

标签: c# encoding bytearray streamreader

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

我的代码看起来像这样

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使用前导码指定的编码或默认编码。我是否真的必须手动将所有已知编码器的前导码与数组的开头进行比较以找到正确的编码器?

1 个答案:

答案 0 :(得分: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 *