Ответ 1
Ну, сообщение об ошибке сообщает вам, почему: он не читает знак байтового байта. Значок порядка байтов находится в начале файла. Без считывания знака порядка байтов декодер UTF-16 не может знать, в каком порядке находятся байты. Очевидно, он делает это лениво, когда вы читаете первый раз, а не когда вы открываете файл - или он предполагает что seek()
запускает новый поток UTF-16.
Если в вашем файле нет спецификации, это определенно проблема, и вы должны указать порядок байтов при открытии файла (см. № 2 ниже). В противном случае я вижу два возможных решения:
-
Прочитайте первые два байта файла, чтобы получить спецификацию перед поиском. Вы, кажется, говорите, что это не сработало, что указывает на то, что, возможно, он ожидает свежий поток UTF-16 после поиска, поэтому:
-
Явным образом задайте порядок байтов, используя
utf-16-le
илиutf-16-be
в качестве кодировки при открытии файла.