Подтвердить что ты не робот

Utf-16 поиск файлов в python. как?

По какой-то причине я не могу найти файл utf16. Он создает "UnicodeException: поток UTF-16 не начинается с спецификации". Мой код:

f = codecs.open(ai_file, 'r', 'utf-16')
seek = self.ai_map[self._cbClass.Text]  #seek is valid int
f.seek(seek)
while True:
    ln = f.readline().strip()

Я пробовал случайные вещи, такие как первое чтение чего-то из потока, не помогло. Я проверил смещение, которое требуется использовать hex editor - строка начинается с символа, а не с нулевым байтом (я думаю, его хороший знак, верно?) Итак, как искать utf-16 в python?

4b9b3361

Ответ 1

Ну, сообщение об ошибке сообщает вам, почему: он не читает знак байтового байта. Значок порядка байтов находится в начале файла. Без считывания знака порядка байтов декодер UTF-16 не может знать, в каком порядке находятся байты. Очевидно, он делает это лениво, когда вы читаете первый раз, а не когда вы открываете файл - или он предполагает что seek() запускает новый поток UTF-16.

Если в вашем файле нет спецификации, это определенно проблема, и вы должны указать порядок байтов при открытии файла (см. № 2 ниже). В противном случае я вижу два возможных решения:

  • Прочитайте первые два байта файла, чтобы получить спецификацию перед поиском. Вы, кажется, говорите, что это не сработало, что указывает на то, что, возможно, он ожидает свежий поток UTF-16 после поиска, поэтому:

  • Явным образом задайте порядок байтов, используя utf-16-le или utf-16-be в качестве кодировки при открытии файла.