Cygwin ou GnuWin32 fornece ferramentas Unix como iconv
e dos2unix
(e unix2dos
). Sob Unix / Linux / Cygwin, você vai querer usar "windows-1252" como codificação em vez de ANSI (veja abaixo). (A menos que você saiba que seu sistema está usando uma página de códigos diferente de 1252 como sua página de códigos padrão, caso em que você precisará informar iconv a página de código correta para traduzir.)
Converta de um ( -f
) para o outro ( -t
) com:
$ iconv -f windows-1252 -t utf-8 infile > outfile
Ou em um formulário para encontrar tudo e conquistar:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;
Alternativamente:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;
Esta pergunta foi feita muitas vezes neste site, então aqui estão algumas informações adicionais sobre "ANSI". Em uma resposta a uma pergunta relacionada, CesarB menciona :
There are several encodings which are called "ANSI" in Windows. In fact, ANSI is a misnomer. iconv has no way of guessing which you want.
The ANSI encoding is the encoding used by the "A" functions in the Windows API (the "W" functions use UTF-16). Which encoding it corresponds to usually depends on your Windows system language. The most common is CP 1252 (also known as Windows-1252). So, when your editor says ANSI, it is meaning "whatever the API functions use as the default ANSI encoding", which is the default non-Unicode encoding used in your system (and thus usually the one which is used for text files).
A página à qual ele se liga dá esse detalhe histórico (citado de um PDF da Microsoft ) sobre as origens do CP 1252 e ISO-8859-1, outra codificação frequentemente usada:
[...] this comes from the fact that the Windows code page 1252 was originally based on an ANSI draft, which became ISO Standard 8859-1. However, in adding code points to the range reserved for control codes in the ISO standard, the Windows code page 1252 and subsequent Windows code pages originally based on the ISO 8859-x series deviated from ISO. To this day, it is not uncommon to have the development community, both within and outside of Microsoft, confuse the 8859-1 code page with Windows 1252, as well as see "ANSI" or "A" used to signify Windows code page support.