В моей файловой системе (Windows 7) есть несколько текстовых файлов (это файлы сценариев SQL, если это имеет значение).
При открытии с помощью Notepad++ в меню "Кодировка" некоторые из них имеют кодировку "UCS-2 Little Endian", а некоторые "UTF-8 without BOM".
В чем здесь разница? Все они кажутся совершенно правильными скриптами. Как я могу определить, какие кодировки у файла без Notepad++?
Файлы обычно указывают свою кодировку в заголовке файла. Есть много примеров здесь. Однако, даже читая заголовок, вы никогда не можете быть уверены в том, какая кодировка действительно используется в файле.
Например, файл с первыми тремя байтами 0xEF,0xBB,0xBF
- это вероятно файл в кодировке UTF-8. Однако это может быть файл ISO-8859-1, который начинается с символов 
. Или это может быть файл совершенно другого типа.
Notepad++ делает все возможное, чтобы угадать, какую кодировку использует файл, и чаще всего у него это получается. Иногда он все же ошибается - для этого и существует меню 'Кодировка', чтобы вы могли отменить его предположения.
Для двух упомянутых вами кодировок:
0xFF,0xFE
в качестве первых 2 байт. Насколько я могу судить, Notepad++ описывает их как "UCS-2", поскольку он не поддерживает некоторые аспекты UTF-16.Вы не можете. Если бы вы могли это сделать, не было бы такого количества веб-сайтов и текстовых файлов со "случайной тарабарщиной". Вот почему кодировка обычно передается вместе с полезной нагрузкой в виде метаданных.
Если ее нет, все, что вы можете сделать, это "угадать", но результат часто неоднозначен, поскольку одна и та же последовательность байтов может быть действительна в нескольких кодировках.