Dúvida: Como alterar o encode do projeto todo de forma automatizada?

Olá pessoal, tenho um projeto java que usa o encode default do eclipse. Temos aí então pelo menos 3 encodes diferentes sendo usados na aplicação, CP1252, ISO-8859-1 e UTF-8. E preciso pegar todos estes arquivos e converter para UTF-8. Já vi que tem uma config de workspace que eu posso alterar que vai afetar o projeto todo. Mas não é suficiente pois:

  1. eu tenho que alterar os caracteres especiais um a um.
  2. isto só altera o encode que o eclipse usa para ler os arquivos. Caso alguém use uma workspace diferente da minha certamente verá caracteres estranhos no lugar dos caracteres especiais.

Eu consegui resolver o problema de conversão utilizando o notepad++. Ele converte os caracteres de um encode para o outro sem problemas. Mas eu teria que fazer um a um e isto não é viável. Vi que ele possui uma função de macro que automatiza uma certa tarefa, mas infelizmente para o caso de conversão de encode esta função está bugada. No lugar de converter ela simplesmente apaga tudo do arquivo e deixa apenas nele o que está na área de transferência(ctrl+c ou ctrl+x).

Alguém sabe como alterar o encode para UFT-8 de todo o projeto de forma automatizada e eficiente?

Precisamos fazer isso uma vez e usamos shell script com os comandos file para detectar e iconv para alterar a codificação: http://ss64.com/bash/
Não tenho mais o script.

se for linux:

se for windows eu lamento.

É windows mas eu tenho máquina virtual rodando linux para emergências igual esta xD. Já tinha até testado os comandos do link mas sem sucesso. Alguns arquivos foram convertidos sem problema, no entanto outros arquivos tiveram parte do código removido O.O .

Mas com este link aí aprendi sobre o comando file que diz qual tipo o arquivo tem. Vou estudar shell script para fundir isto com o que vi no link acima. Minha idéia é dentro do for (find -name *.java) fazer o iconv de acordo com o tipo do arquivo usado no momento. Tomara que dê certo xD.

quando conseguir lembra de postar aqui pra comu!

[]'s

Consegui resolver o problema. Foi só fazer o iconv iso-8859-1 to utf8 que resolveu. 85% dos arquivos do projetos foram convertidos sem problema algum. Uns 10% tiveram parte do código removido oO e uns 5 % não converteram corretamente. Estes 10% com código apagado tive que usar notepad++ para cada um destes arquivos. Os 5% tive que reescrever as letras acentuadas.

O link com o código usado no linux para conveter todos os arquivos de projeto foi o:

http://www.vivaolinux.com.br/dica/Como-trocar-o-encode-de-ISO-para-UTF8-e-trocar-as-quebras-de-linha-(EOL)-de-formato-Windows-para-Unix

Possivelmente nem todos eram iso-8859-1.
Por isso foi dito pra usar file pra identificar.

[quote=Schuenemann]Possivelmente nem todos eram iso-8859-1.
Por isso foi dito pra usar file pra identificar.[/quote]

Bem, eu não sei como fazer fazer um if dentro do for (find name) para tratar só quem era iso-8859-1. Perdi um dia inteiro tentando descobrir isso e achei que seria menos custoso fazer na mão os que deram problema. Se vc souber como fazer este código poderia postar para que outros não precisem passar pelo que passei :P.

Bem pessoal, tive problemas de novo. Desta vez foi com os jsps. Fiz o comando abaixo para ver o tipo de encode dos arquivos.

for i in $(find -name \*.jsp); do
  file -i $i; 
done

E o abaixo para converter.

for i in $(find -name \*.jsp); do
  iconv $i -f iso-8859-1 -t utf8 -o $i;
done

Ele converteu certo mas tem um porém. Como ele converteu para utf8 sem BOM, quando vou no eclipse, ele reconhece como sendo iso-8859-1. Se eu for no notepad++ e mandar converter 1 arquivo para utf-8 com BOM, na hora de ver as propriedades do arquivo no eclipse reconhece como sendo utf-8.

Alguém sabe como converter para utf-8 com BOM?

Tem que inserir no inicio do arquivo os caracteres:
EF BB BF

EM HEXADECIMAL, ÓBVIO.

FONTE: http://www.igorescobar.com/blog/2009/10/26/problemas-com-utf-8-with-bom/

ok. Irei fazer isso. Obrigado.

[quote=JM4X]Tem que inserir no inicio do arquivo os caracteres:
EF BB BF

EM HEXADECIMAL, ÓBVIO.

FONTE: http://www.igorescobar.com/blog/2009/10/26/problemas-com-utf-8-with-bom/[/quote]

falei isso mas nao testei, se funfar avisa aki e carimba resolvido na bagaça!
(coloca [RESOLVIDO] no titulo do topico.

=D

Funcionou. Baixei o programa “Freeware Hex Editor XVI32” e adicionei EF BB BF no início do arquivo. Assim o eclipse reconheceu como sendo UTF-8. Mas isto só serviu para um arquivo. E fazer todos os 500 arquivos na mão vai ser foda. Vou ver se consigo criar um programa c++ ou java que faça isso em todos os arquivos *.jsp. Quando terminar irei postar aqui o código

Tenta com shell script mesmo: http://stackoverflow.com/questions/4783657/cli-write-byte-at-address-hexedit-modify-binary-from-the-command-line
Senão, Python ou Ruby são super simples pra esse tipo de coisa.