.NET libs - зло

Nov 13, 2008 14:13

Замечательный класс .NET StreamReader делает две неочевидные вещи :

1) Флаг detectEncodingFromByteOrderMarks конструктора не влияет на наличие первых 3 байт в буфере, если они совпадут с unicode 0xEFBBBF.

2) DiscardBufferedData плюёт на загоны конструктора по этим трём байтам и тупо апит буфер с стрима

Что же получаем на выходе в MSVS2005?

StreamReader s = new StreamReader(someFile);

Первые два байта равны 0x0D0A

s.Seek(0, SeekOrigin.Begin);

Поскольку Seek всё равно на unicode, первые два байта равны 0xEFBB

а DiscardBufferedData в следствии 2-го пункта не меняет ситуацию => Никогда, никогда не юзайте StreamReader и Seek

Кстати, возможно мелкомягкие где-то это уже поффиксили ;)
Previous post Next post
Up