Cygwin o GnuWin32 proporcionan herramientas de Unix como iconvy dos2unix(y unix2dos). En Unix / Linux / Cygwin, querrás usar "windows-1252" como codificación en lugar de ANSI (ver más abajo). (A menos que sepa que su sistema está usando una página de códigos que no sea 1252 como su página de códigos predeterminada, en cuyo caso deberá indicarle a iconv la página de códigos correcta para traducir).
Convierte de uno ( -f) a otro ( -t) con:
$ iconv -f windows-1252 -t utf-8 infile > outfile
O en una forma de buscar 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 llaman "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 el CP 1252 (también conocido como Windows-1252). Entonces, cuando su editor dice ANSI, significa "lo que las funciones de API usan 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 utiliza para archivos de texto).
La página a la que enlaza 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 proviene del 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, y vea "ANSI" o "A" para indicar el soporte de la página de códigos de Windows .
¡No use el mismo nombre de archivo como entrada y salida! iconvparece truncar los archivos a 32,768 bytes si exceden este tamaño. Mientras escribe en el archivo que intenta leer, se las arregla para hacer el trabajo si el archivo es lo suficientemente pequeño, de lo contrario, trunca el archivo sin ninguna advertencia ...
Niavlys
1
FYI Esta pregunta está etiquetada con osx y no parece que ninguno de los comandos convert-all funcione en Yosemite o El Cap. La versión iconv que Apple envía no es compatible con --verbose o -o, y la otra stdout de redirección de sintaxis no funciona por alguna razón y simplemente la envía a la stdout normal.
La conversión de ANSI a UTF a través de su primera propuesta borra todo el contenido de mi archivo de texto ...
Acroneos
@Acroneos: cometió un error: el archivo interno es IN.txt, el archivo externo es OUT.txt ... de esta manera es imposible sobrescribir el original. si usó el mismo nombre de archivo para IN.txt y OUT.txt, entonces sobrescribe el archivo del que está leyendo, obviamente.
akira
Powershell se convertirá a UTF con BOM. find e iconv podrían ser mucho más fáciles.
UTFCast es un convertidor Unicode para Windows que admite el modo por lotes. Estoy usando la versión paga y estoy bastante cómodo con ella.
UTFCast es un convertidor Unicode que le permite convertir por lotes todos los archivos de texto a codificaciones UTF con solo un clic de su mouse. Puede usarlo para convertir un directorio lleno de archivos de texto a codificaciones UTF, incluidos UTF-8, UTF-16 y UTF-32 a un directorio de salida, mientras mantiene la estructura de directorios de los archivos originales. Ni siquiera importa si su archivo de texto tiene una extensión diferente, UTFCast puede detectar automáticamente archivos de texto y convertirlos.
¡Oh, la versión express (gratuita) es inútil, solo "Detecta" utf-8 CON BOM! (Todos pueden hacer eso ). Solo la versión Pro que se renueva automáticamente cada 3 meses a $ 20 por pop se detectará automáticamente. El precio es elevado para un usuario no empresarial. Y tenga cuidado si prueba la versión básica, y su archivo ya es utf-8 (sin BOM), entonces este convertidor lo detectará como ASCII, luego (re) lo "convertirá" a utf-8, lo que podría resultar en galimatías . ¡Tenga cuidado si esto antes de probar la versión express! Tienen una versión de demostración para el profesional que no produce resultados, ¡en mi humilde opinión no tiene sentido porque no puede verificar los resultados antes de comprar!
SherylHohman
3
Oneliner usando find, con detección automática
La codificación de caracteres de todos los archivos de texto coincidentes se detecta automáticamente y todos los archivos de texto coincidentes se convierten a utf-8codificación:
Para realizar estos pasos, shse usa un subconjunto con -exec, ejecutando una línea con la -cbandera y pasando el nombre del archivo como argumento posicional "$1"con -- {}. En el medio, el utf-8archivo de salida se nombra temporalmente converted.
El findcomando es muy útil para dicha automatización de gestión de archivos.
En mi caso de uso, necesitaba la detección automática de codificación de entrada y había muchos archivos con Windows-1250codificación, para lo cual el comando file -bi <FILE>regresa charset=unknown-8bit. Este no es un parámetro válido para iconv.
Respuestas:
Cygwin o GnuWin32 proporcionan herramientas de Unix como
iconv
ydos2unix
(yunix2dos
). En Unix / Linux / Cygwin, querrás usar "windows-1252" como codificación en lugar de ANSI (ver más abajo). (A menos que sepa que su sistema está usando una página de códigos que no sea 1252 como su página de códigos predeterminada, en cuyo caso deberá indicarle a iconv la página de códigos correcta para traducir).Convierte de uno (
-f
) a otro (-t
) con:O en una forma de buscar y conquistar:
Alternativamente:
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 :
La página a la que enlaza 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:
fuente
iconv
parece truncar los archivos a 32,768 bytes si exceden este tamaño. Mientras escribe en el archivo que intenta leer, se las arregla para hacer el trabajo si el archivo es lo suficientemente pequeño, de lo contrario, trunca el archivo sin ninguna advertencia ...con powershell puedes hacer algo como esto:
mientras que ENC es algo así como unicode, ascii, utf8, utf32. checkout 'ayuda fuera de archivo'.
para convertir todos los archivos * .txt en un directorio a utf8, haga algo como esto:
que crea una versión convertida de cada archivo .txt en DIR2.
EDITAR: Para reemplazar los archivos en todos los subdirectorios use:
fuente
La página de Wikipedia en nuevas líneas tiene una sección sobre utilidades de conversión .
Esta parece ser su mejor apuesta para una conversión utilizando solo las herramientas con las que Windows viene:
fuente
UTFCast es un convertidor Unicode para Windows que admite el modo por lotes. Estoy usando la versión paga y estoy bastante cómodo con ella.
fuente
Oneliner usando find, con detección automática
La codificación de caracteres de todos los archivos de texto coincidentes se detecta automáticamente y todos los archivos de texto coincidentes se convierten a
utf-8
codificación:Para realizar estos pasos,
sh
se usa un subconjunto con-exec
, ejecutando una línea con la-c
bandera y pasando el nombre del archivo como argumento posicional"$1"
con-- {}
. En el medio, elutf-8
archivo de salida se nombra temporalmenteconverted
.El
find
comando es muy útil para dicha automatización de gestión de archivos.Haga clic aquí para más
find
abundancia .fuente
iconv -f original_charset -t utf-8 originalfile > newfile
ejecuta el comando anterior en for loop.
fuente
Use este script de Python: https://github.com/goerz/convert_encoding.py Funciona en cualquier plataforma. Requiere Python 2.7.
fuente
Hay
dos2unix
en unix.Había otra herramienta similar para Windows ( otra referencia aquí ).
¿Cómo convierto entre archivos de texto de Unix y Windows? tiene algunos trucos más
fuente
dos2unix
es útil para convertir saltos de línea , pero el OP está buscando convertir codificaciones de caracteres.Puedes usar EncodingMaster . Es gratis, tiene una versión para Windows, Linux y Mac OS X y funciona muy bien.
fuente
En mi caso de uso, necesitaba la detección automática de codificación de entrada y había muchos archivos con
Windows-1250
codificación, para lo cual el comandofile -bi <FILE>
regresacharset=unknown-8bit
. Este no es un parámetro válido paraiconv
.He tenido los mejores resultados con enca .
Convierta todos los archivos con extensión txt a utf-8
fuente