it-swarm.dev

Archivos de conversión por lotes para la codificación

¿Cómo puedo convertir por lotes archivos en un directorio para su codificación (por ejemplo, ANSI-> UTF-8) con un comando o herramienta?

Para archivos individuales, un editor ayuda, pero ¿cómo hacer el trabajo de archivos masivos?

46
desolat

Cygwin o GnuWin32 proporcionan herramientas Unix como iconv y dos2unix (y unix2dos) . Bajo Unix/Linux/Cygwin, querrá usar "windows-1252" como la codificación en lugar de ANSI (ver más abajo). (A menos que sepa que su sistema utiliza una página de códigos distinta de 1252 como su página de códigos predeterminada, en cuyo caso deberá indicar a iconv la página de códigos correcta para traducir).

Convierta de uno (-f) al otro (-t) con:

$ iconv -f windows-1252 -t utf-8 infile > outfile

O en una forma de encontrar 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 realizado muchas veces en este sitio, por lo 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 lo que 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 normalmente 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 "cualquiera que sea el uso de las funciones API como la codificación ANSI predeterminada", que es la codificación predeterminada no Unicode que se usa en su sistema (y por lo tanto, la que se usa para los archivos de texto).

La página a la que se vincula proporciona este tidbit histórico (citado de un PDF de Microsoft ) sobre los orígenes del CP 1252 y ISO-8859-1, otro a menudo codificación utilizada

[...] esto se debe al hecho de que la página de códigos de Windows 1252 se basó originalmente en un borrador 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 subsiguientes originalmente basadas en la serie ISO 8859-x desviada de ISO. Hasta el día de hoy, no es infrecuente que la comunidad de desarrollo, tanto dentro como fuera de Microsoft, confunda la página de códigos 8859-1 con Windows 1252, además de ver "ANSI" o "A" que se usa para indicar el soporte de la página de códigos de Windows .

36
quack quixote

con powershell puedes hacer algo como esto:

%  get-content IN.txt | out-file -encoding ENC -filepath OUT.txt

mientras que ENC es algo como unicode, ascii, utf8, utf32. Checkout 'ayuda de salida de archivo'.

para convertir todos los archivos * .txt en un directorio a utf8, 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.

EDITAR: 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
}
28
akira

La página de Wikipedia sobre líneas nuevas 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 se entrega:

TYPE unix_file | FIND "" /V > dos_file
6
nagul

UTFCast es un convertidor Unicode para Windows que admite el modo por lotes. Estoy usando la versión de pago 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 del mouse. Puede usarlo para convertir un directorio lleno de archivos de texto a codificaciones UTF que incluyen 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 los archivos de texto y convertirlos.

3
Tiler

Oneliner utilizando 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 codificación utf-8:

$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;

Para realizar estos pasos, se utiliza un sub Shell sh con -exec, ejecutando una sola línea con el indicador -c y pasando el nombre de archivo como el argumento posicional "$1" con -- {}. En medio, el archivo de salida utf-8 se llama temporalmente converted.

El comando find es muy útil para dicha automatización de administración de archivos.

Haga clic aquí para más find en abundancia .

2
Serge Stroobandt

iconv -f original_charset -t utf-8 originalfile > newfile

ejecute el comando anterior en for loop.

1
Aneesh Garg

Puede usar EncodingMaster . Es gratis, tiene una versión para Windows, Linux y Mac OS X y funciona realmente bien.

0
Francisco Vera

En mi caso de uso, necesitaba una detección de codificación de entrada automática y había muchos archivos con codificación Windows-1250, para los cuales el comando file -bi <FILE> devuelve charset=unknown-8bit. Este parámetro no es válido para iconv.

He tenido los mejores resultados con enca .

Convierte todos los archivos con extensión txt a utf-8

find . -type f -iname *.txt -exec sh -c 'echo "$1" && enca "$1" -x utf-8' -- {} \;
0
Bedla

Use este script de Python: https://github.com/goerz/convert_encoding.py Funciona en cualquier plataforma. Requiere Python 2.7.

0
kinORnirvana

Hay dos2unix en unix.
Había otra herramienta similar para Windows ( otra referencia aquí ).

¿Cómo puedo convertir entre archivos de texto Unix y Windows? tiene algunos trucos más

0
nik