2009-12-18 4 views
3

Im пытается преобразовать массив байтов в строку. Байт-массив включает преамбулу (если у используемого кодера был один из них), и вы должны указать кодировку по умолчанию, если в массиве байтов не сохраняется преамбула.C# Преобразование байтового массива в строку с использованием преамбулы или кодировки по умолчанию

Мой код выглядит следующим образом

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 использовать кодировку, указанную в преамбуле или по умолчанию, если преамбула не найдена. Действительно ли мне нужно вручную сравнить преамбулу всех известных кодеров с началом массива, чтобы найти правильный?

ответ

2

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

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

+2

сломанной ссылке, где находится код, пожалуйста ?? –