No meu sistema de arquivos (Windows 7) eu tenho alguns arquivos de texto (Estes são arquivos de script SQL, se isso importa).
Quando aberto com Notepad++, no "Encoding" menu alguns deles são reportados como tendo uma codificação de "UCS-2 Little Endian" e alguns de "UTF-8 sem BOM".
Qual é a diferença aqui? Todos eles parecem ser roteiros perfeitamente válidos. Como eu poderia dizer quais codificações o arquivo tem sem o Notepad++?
Os ficheiros geralmente indicam a sua codificação com um cabeçalho de ficheiro. Há muitos exemplos aqui. No entanto, mesmo lendo o cabeçalho você nunca pode ter certeza do que está realmente usando.
Por exemplo, um arquivo com os três primeiros bytes 0xEF,0xBBB,0xBF
é provavelmente um arquivo codificado em UTF-8. Entretanto, pode ser um arquivo ISO-8859-1 que por acaso começa com os caracteres 
. Ou pode ser um tipo de arquivo totalmente diferente.
O Notepad++ faz o seu melhor para adivinhar o que codifica um ficheiro, e na maioria das vezes acerta. Mas às vezes ele erra - isso's porque isso 'Encoding' menu está lá, para que você possa anular o seu melhor palpite.
Para as duas codificações que você menciona:
0xFF,0xFE
como os primeiros 2 bytes. Pelo que posso dizer, Notepad++ descreve-os como "UCS-2" uma vez que não suporta't certas facetas do UTF-16.Não pode. Se você pudesse fazer isso, não haveria tantos sites ou arquivos de texto com "algaraviadas aleatórias" por aí. Essa's é a razão pela qual a codificação é normalmente enviada junto com a carga útil como meta dados.
Caso não seja's, tudo que você pode fazer é um "palpite inteligente", mas o resultado é muitas vezes ambíguo uma vez que a mesma sequência de bytes pode ser válida em várias codificações.