Tentando converter um arquivo ASCII para ANSI no Linux:
$ file -bi relocate.xml
text/xml; charset=us-ascii
$ iconv -f us-ascii -t ms-ansi < relocate.xml | file -bi -
text/xml; charset=us-ascii
$ cat relocate.xml | recode us-ascii..ms-ansi | file -bi -
Request: ANSI_X3.4-1968..:libiconv:..CP1252
Shrunk to: ANSI_X3.4-1968..CP1252
text/xml; charset=us-ascii
Eu também tentei outras ferramentas para inferir a codificação e todas elas retornam o mesmo resultado:
$ enca -L none relocate.xml ; echo "###" ; uchardet relocate.xml ; echo "###" ; encguess relocate.xml
7bit ASCII characters
CRLF line terminators
###
ASCII
###
relocate.xml US-ASCII
Como você pode ver, não há mensagem de erro de iconv
nem de recode
ferramentas, mas a codificação final ainda é us-ascii
.
Como posso convertê-lo para ANSI?
Se a codificação para a qual você está convertendo (ms-ansi = windows-1252) for um superconjunto da codificação da qual você está convertendo (ascii),
iconv
deixe-a como está, porque obviamente não há nada a ser feito.Além disso, o "conjunto de caracteres" de um arquivo não é algum tipo de metadados obrigatórios, e o
file
utilitário está apenas adivinhando , usando heurísticas não confiáveis que falham ~ 20% das vezes, o que pode ser.Exemplo:
Não, esse arquivo é um arquivo UTF-8, que também possui a declaração xml correta.
Dos comentários:
Adicione a declaração xml correta (
<?xml ... ?>
como acima) e verifique com algum validador xml se a sintaxe xml está OK.