Чтение подписанного UTF-8 с позицией streamreader - basestream и возвращаемым несоответствием длины
Я не новичок в кодировании, но я немного новичок в этом деле. VB.net
Экспериментируя с StreamReader в VB.net в .Net Framework 2, я заметил, что если при попытке прочитать символы файла в кодировке UTF-8, сохраняя целое число оболочки для подсчета позиции байта, возникает несоответствие, которое возникает в конце для файлы меньшего размера и где угодно для файлов гораздо большего размера, что не позволит возвращаемым значениям суммироваться до basestream.length. Я каждый раз подтверждал, что кодировка будет от UTF-8 до BOM / Preamble в небольшой приятной функции, которая соответствует тому, что другие редакторы предполагают из файла. Насколько я понимаю, где-то по пути символ с несколькими байтами разделяется, вызывая это несоответствие. Моя конечная цель - проиндексировать определенную позицию символа / строки в текстовом файле, поэтому знание правильной позиции имеет первостепенное значение. Я понимаю, что позиция буфера может отличаться от позиции чтения в StreamReader, но сброс буфера при возникновении несоответствия не помогает (я могу отслеживать несоответствие, когда мой счетчик и позиция basestream.position не совпадают). Я обнаружил, что использование кодировки UTF-7 в этих файлах значительно приближает сумму возвращаемой длины к basestream.position. Между прочим, я использую блок чтения, и для целей эффективности / скорости нея намерен сам разобрать байты на символы (как это предусмотрено в readblock из коробки).
Поэтому мой вопрос заключается в том, как я могу предотвратить это несоответствие? Может ли UTF-7 взаимозаменяемо использоваться с UTF-8 с BOM в StreamReader и StreamWriter без повреждения какой-либо части данных?
Любое решение в c# также может помочь в дополнение к vb, как я буду видеть через концепцию. Я очень ценю ваше терпение. Спасибо...
Что я уже пробовал:
Веб-исследования, обширное тестирование методом проб и ошибок