В моей файловой системе (Windows 7) у меня есть несколько текстовых файлов (это файлы сценариев SQL, если это имеет значение).
При открытии с помощью Notepad ++ в меню «Кодировка» сообщается, что некоторые из них имеют кодировку «UCS-2 Little Endian», а некоторые - «UTF-8 без BOM».
В чем здесь разница? Все они кажутся совершенно правильными сценариями. Как я могу сказать, какие кодировки у файла без Notepad ++?
file-systems
character-encoding
utf-8
notepad++
завивать волосы щипцами
источник
источник
enca
иchardet
для систем POSIX.iconv
в частности это полезно для этой цели. По сути, вы перебираете поврежденные строки символов / текста в различных кодировках, чтобы увидеть, какой из них работает. Вы выигрываете, когда персонажи больше не портятся. Я хотел бы ответить здесь, с программным примером. Но это, к сожалению, защищенный вопрос.chardet
илиchardetect
не доступно в вашей системе, вы можете установить пакет через менеджер пакетов (например,apt search chardet
- на ubuntu / debian, обычно называемый пакетомpython-chardet
илиpython3-chardet
), или через pip сpip install chardet
(илиpip install cchardet
для более быстрой версии c-optimized).Ответы:
Файлы обычно указывают свою кодировку с заголовком файла. Есть много примеров здесь . Однако даже читая заголовок, вы никогда не можете быть уверены, какую кодировку файл действительно использует .
Например, файл с первыми тремя байтами
0xEF,0xBB,0xBF
, вероятно , является файлом в кодировке UTF-8. Однако это может быть файл ISO-8859-1, который начинается с символов
. Или это может быть совершенно другой тип файла.Notepad ++ делает все возможное, чтобы угадать, какую кодировку использует файл, и в большинстве случаев он делает это правильно. Хотя иногда это не так - поэтому меню «Кодировка» есть, поэтому вы можете отменить его лучшее предположение.
Для двух кодировок вы упоминаете:
0xFF,0xFE
первых 2 байтов. Из того, что я могу сказать, Notepad ++ описывает их как «UCS-2», поскольку он не поддерживает определенные аспекты UTF-16.источник
Тебе нельзя. Если бы вы могли это сделать, не было бы так много веб-сайтов или текстовых файлов со «случайным бредом». Вот почему кодирование обычно отправляется вместе с полезной нагрузкой в виде метаданных.
В противном случае все, что вы можете сделать, - это «умное предположение», но результат часто неоднозначен, поскольку одна и та же последовательность байтов может быть допустимой в нескольких кодировках.
источник