Уровень абстракции над стандартным потоком «поиск» будет включать чтение каждого символа по очереди из файла (по умолчанию .net предполагает, что файлы имеют формат UTF-8), поэтому любой файл, который не начинается с BOM предполагает, что файл имеет формат UTF-8.
UTF-8 имеет символы переменного размера, поэтому вы не можете знать, сколько байтов занимает символ, пока не прочитаете этот байт.
Следовательно, вам необходимо последовательно обращаться к каждому байту в файле, чтобы знать, где начинается / заканчивается каждый байт.
В заключение, если вы знаете, что это файл AscII, UTF-16 или UTF-32, вы можете сделать это, потому что вы знаете размер каждого символа (насколько я знаю, если я ошибаюсь, пожалуйста, исправьте меня )
Если это UTF-8, вы не можете "искать" персонажа.
Надеюсь, это поможет,