file - codificacion - convertir archivos a utf 8 sin bom
Cambie la codificación de archivos a utf-8 a través de vim en una secuencia de comandos (3)
En realidad, puede querer establecer nobomb (BOM = marca de orden de bytes), especialmente en el mundo [no en Windows].
por ejemplo, tenía un script que no funcionaba porque había una marca de orden de bytes al comienzo. Por lo general, no se muestra en los editores (incluso con la lista establecida en vi) o en la consola, por lo que es difícil de detectar.
El archivo se veía así
#!/usr/bin/perl
...
Pero tratando de ejecutarlo, me sale
./filename
./filename: line 1: #!/usr/bin/perl: No such file or directory
No se muestra, pero al comienzo del archivo, es la lista de materiales de 3 bytes. Entonces, en lo que se refiere a Linux, ¡el archivo no comienza con #!
La solucion es
vi filename
:set nobomb
:set fileencoding=utf-8
:wq
Esto elimina la lista de materiales al comienzo del archivo, por lo que es correcto utf8.
NB Windows usa la lista de materiales para identificar un archivo de texto como utf8, en lugar de ANSI. Linux (y la especificación oficial) no.
Acabo de ser derribado después de que nuestro servidor ha sido actualizado de Debian 4 a 5. Cambiamos al entorno UTF-8 y ahora tenemos problemas para obtener el texto impreso correctamente en el navegador, porque todos los archivos están en codificaciones no utf8 como iso- 8859-1, ascii, etc.
Probé muchos scripts diferentes.
El primero que probé es "iconv". Eso no funciona, cambia el contenido, pero los archivos que se encuentran todavía no son utf8.
Mismo problema con enca, vmv, convmv y algunas otras herramientas que instalé a través de apt-get.
Luego encontré un código python, que usa el módulo Chardet Universal Detector, para detectar la codificación de un archivo (que funciona bien), pero el uso de la clase Unicode o la clase de códec para guardarlo como utf-8 no funciona, sin ningún error.
La única forma que encontré para obtener el archivo y su contenido convertido a UTF-8, es vi.
Estos son los pasos que hago para un archivo:
vi filename.php
:set bomb
:set fileencoding=utf-8
:wq
Eso es. Ese funciona perfecto. Pero ¿cómo se puede ejecutar esto a través de un script? Me gustaría escribir una secuencia de comandos (linux shell) que atraviesa un directorio que toma todos los archivos php, y luego los convierte utilizando vi con los comandos anteriores. Como necesito iniciar la aplicación vi, no sé cómo hacer algo como esto:
"vi --run-command='':set bomb, :set fileencoding=utf-8'' filename.php"
Espero que alguien pueda ayudarme.
Esta es la forma más sencilla que conozco para hacer esto fácilmente desde la línea de comando:
vim +"argdo se bomb | se fileencoding=utf-8 | w" $(find . -type f -name *.php)
O mejor aún si se espera que la cantidad de archivos sea bastante grande:
find . -type f -name *.php | xargs vim +"argdo se bomb | se fileencoding=utf-8 | w"
Podrías poner tus comandos en un archivo, llamémoslo script.vim
:
set bomb
set fileencoding=utf-8
wq
A continuación, invoque Vim con la opción -S
(fuente) para ejecutar el script en el archivo que desea corregir. Para hacer esto en un montón de archivos que podrías hacer
find . -type f -name "*.php" -exec vim -S script.vim {} /;
También puedes poner los comandos de Vim en la línea de comando usando la opción +
, pero creo que puede ser más fácil de leer así.
Nota: No he probado esto.