Cygwin o GnuWin32 proporcionan herramientas de Unix como iconv
y dos2unix
(y unix2dos
). En Unix/Linux/Cygwin, querrá usar "windows-1252" como codificación en lugar de ANSI (ver más abajo). (A menos que sepa que su sistema está utilizando una página de códigos diferente a 1252 como su página de códigos predeterminada, en cuyo caso deberá informar a iconv la página de códigos correcta para traducir.)
Convertir de uno (-f
) al otro (-t
) con:
$ iconv -f windows-1252 -t utf-8 infile > outfile
O en una forma de encontrar todo y 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 pregunta se ha hecho muchas veces en este sitio, así que aquí hay información adicional sobre "ANSI". En una respuesta a una pregunta relacionada, CesarB menciona:
Hay varias codificaciones que se denominan "ANSI" en Windows. De hecho, ANSI es un nombre inapropiado. iconv no tiene forma de adivinar cuál quieres.
La codificación ANSI es la codificación utilizada por las funciones "A" en la API de Windows (las funciones "W" usan UTF-16). La codificación a la que corresponde generalmente depende del idioma de su sistema Windows. El más común es CP 1252 (también conocido como Windows-1252). Entonces, cuando su editor dice ANSI, significa "lo que sea que las funciones API usen como codificación ANSI predeterminada", que es la codificación no Unicode predeterminada utilizada en su sistema (y, por lo tanto, generalmente la que se usa para archivos de texto).
La página a la que se vincula ofrece este dato histórico (citado de un PDF de Microsoft) sobre los orígenes de CP 1252 e ISO-8859-1, otra codificación utilizada con frecuencia:
[...] esto se debe al hecho de que la página de códigos de Windows 1252 se basó originalmente en un borrador de ANSI, que se convirtió en la norma ISO 8859-1. Sin embargo, al agregar puntos de código al rango reservado para los códigos de control en el estándar ISO, la página de códigos de Windows 1252 y las páginas de códigos de Windows posteriores basadas originalmente en la serie ISO 8859-x se desviaron de ISO. Hasta el día de hoy, no es raro que la comunidad de desarrollo, tanto dentro como fuera de Microsoft, confunda la página de códigos 8859-1 con Windows 1252, así como ver "ANSI" o "A" que se usan para indicar la compatibilidad con la página de códigos de Windows. .
Con PowerShell puedes hacer algo como esto:
Get-Content IN.txt | Out-File -encoding ENC -filepath OUT.txt
Mientras que ENC es algo así como unicode , ascii , utf8 y utf32 . Echa un vistazo a 'archivo de ayuda'.
Para convertir todos los archivos *.txt en un directorio a UTF-8, haga algo como esto:
foreach($i in ls -name DIR/*.txt) { \
Get-Content DIR/$i | \
Out-File -encoding utf8 -filepath DIR2/$i \
}
que crea una versión convertida de cada archivo .txt en DIR2.
Para reemplazar los archivos en todos los subdirectorios, use:
foreach($i in ls -recurse -filter "*.java") {
$temp = Get-Content $i.fullname
Out-File -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
La página de Wikipedia sobre saltos de línea tiene una sección sobre utilidades de conversión.
Esta parece ser su mejor apuesta para una conversión utilizando solo las herramientas que Windows incluye:
TYPE unix_file | FIND "" /V > dos_file