C # Преобразование байтового массива в строку, используя преамбулу или кодировку по умолчанию - PullRequest
3 голосов
/ 18 декабря 2009

Я пытаюсь преобразовать байтовый массив в строку. Массив байтов включает в себя преамбулу (если использованный кодер имел одну из них), и вы должны указать кодировку по умолчанию, если в байтовом массиве нет преамбулы.

Мой код выглядит так

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 Ответ

2 голосов
/ 18 декабря 2009

С MSDN : «StreamReader предназначен для ввода символов в определенной кодировке». Так что да, вам действительно нужно найти правильную кодировку из преамбулы, чтобы сделать это. Вот пример метода, чтобы сделать это здесь:

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

Редактировать : вышеуказанная ссылка не работает, но старая страница доступна в интернет-архиве Wayback Machine: https://web.archive.org/web/20090203034127/http://www.personalmicrocosms.com/Pages/dotnettips.aspx?c=15&t=17*

...