Seu arquivo contém dois bytes, EB e 0A em hexadecimal. É provável que o arquivo esteja usando um conjunto de caracteres com um byte por caractere, como ISO-8859-1 ; nesse conjunto de caracteres, EB é ë:
$ printf "3\n" | iconv -f ISO-8859-1
ë
Outros candidatos seriam δ na página de códigos 437 , Ù em página de códigos 850 ...
A saída de od -x
é confusa nesse caso por causa do endianness; uma opção melhor é -t x1
, que usa bytes únicos:
$ printf "3\n" | od -t x1
0000000 eb 0a
0000002
od -x
mapeia para od -t x2
, que lê dois bytes por vez, e em sistemas little-endian, os bytes são exibidos na ordem inversa.
Quando você se deparar com um arquivo como este, que não é válido UTF-8 (ou não faz sentido quando interpretado como um arquivo UTF-8), não há nenhuma maneira infalível para determinar automaticamente sua codificação (e conjunto de caracteres ). Contexto pode ajudar: se for um arquivo produzido em um PC ocidental nas últimas duas décadas, há uma boa chance de que ele esteja codificado em ISO-8859-1, -15 (a variante do Euro) ou Windows-1252; Se for mais antigo, o CP-437 e o CP-850 são candidatos prováveis. Arquivos de sistemas da Europa Oriental, ou sistemas russos ou asiáticos, usariam conjuntos de caracteres diferentes dos quais eu não sei muito. Em seguida, há EBCDIC ... iconv -l
listará todos os conjuntos de caracteres que o iconv
conhece e você pode prosseguir por tentativa e erro a partir daí.
(Em um ponto eu conhecia a maioria dos CP-437 e ATASCII de cor, eram os dias.)