2014-09-22 3 views
0

У меня есть следующий фрагмент кода:StreamReader не удается обнаружить BOM

using (StreamReader sr = new StreamReader(path, Encoding.GetEncoding("shift-jis"), true)) { 
    mCertainFileIsUTFFormat = !sr.CurrentEncoding.Equals(Encoding.GetEncoding("shift-jis")); 
    mCodingFromBOM = sr.CurrentEncoding; 

    String line = sr.ReadToEnd(); 
    return line.Split('\n'); 
} 

В основном чтении файла и при условии, Shift-JIS, если нет BOM. Увы, этот метод всегда, несмотря ни на что, возвращает кодировку Shift-JIS, даже если у данного файла есть спецификация. Я делаю что-то неправильно здесь или, возможно, есть известная проблема? Я всегда мог открыть файл двоичный файл и делать работу самостоятельно, но это должен делать то, что я хочу :)

+0

Обязательно позвоните 'Read' любого типа - он не обнаружит кодировку * перед * чтением. [CurrentEncoding] (http://msdn.microsoft.com/en-us/library/system.io.streamreader.currentencoding%28v=vs.110%29.aspx) - «Значение может отличаться после первого вызова любой метод Read StreamReader, поскольку автоопределение кодирования не выполняется до первого вызова метода Read. " –

+0

Хм. позвольте мне попробовать. :) –

+0

Вы сэр зарабатываете +1 интернетов за день. Сделайте этот ответ, и я постараюсь его решить. –

ответ

6

Вам необходимо позвонить Read любого рода - StreamReader не обнаружит кодировку перед тем чтения. То есть получить кодировку после ReadToEnd вызова:

String line = sr.ReadToEnd(); 
    mCodingFromBOM = sr.CurrentEncoding; 

Информация: StreamReader.CurrentEncoding

Значение может быть различным после первого вызова любого метода Read` из StreamReader, поскольку кодирующая автоопределение не делается до первого звонка к методу чтения.

Смежные вопросы