Преобразование byte[] в string без проблем с BOM в UTF

До недавнего времени для преобразования массива байт в строку я использова простой дедовский способ.

byte[] bytes = this.ReadFromFile();
string content = Encoding.UTF8.GetString(bytes);

Этот код не нуждается в каком либо пояснении я думаю каждый хотя бы раз, но так писал. Проблемы здесь возникают, когда наш массив содержит контент файлов сохраненных в кодировке UTF-x. Дело в том, что в начале каждого файла присутствует маркер последовательности байтов (Byte Order Mark). И приведенный выше код не пропустит его и вернет вместо BOM знак вопроса "?".

Чтобы этого избежать лучше воспользоваться StreamReader-ом.

byte[] bytes = this.ReadFromFile();

string content;

using (TextReader reader = new StreamReader(new MemoryStream(bytes)))
{
	content = reader.ReadToEnd();
}

Комментарии

Оставить комментарий