.bat : Conversión de ANSI a UTF-8 con CHCP 65001

Rezona -  
brucine Mensajes publicados 24642 Fecha de registro   Estado Miembro Última intervención   -

Hola,

Hasta ahora, estaba utilizando el formato ANSI para archivos ".bat". Pero recientemente he descubierto problemas de compatibilidad debido a los caracteres especiales. Usaba (Alt XXXX) para convertir correctamente las letras acentuadas (nombre de archivo, ruta del menú de inicio...).
Buscando en internet, encontré una solución que consiste en agregar CHCP 65001 al principio del código y volver a poner los acentos tal cual sin (Alt XXXX) para guardar en formato UTF-8.

Mi pregunta es, teniendo un cierto número de archivos ".bat" que no deseo probar uno por uno, ¿puede el uso de CHCP 65001 causar perturbaciones, errores... en archivos .bat que funcionaban a la perfección en ANSI + (Alt XXXX)?

Gracias por sus opiniones y, si es necesario, aclaraciones.

2 respuestas

brucine Mensajes publicados 24642 Fecha de registro   Estado Miembro Última intervención   4 139
 

Hola,

Tendrías que precisar cómo has procedido, no está claro.

Suponiendo la siguiente prueba:

echo menú dALT 130marrer

pause

No soy capaz de obtener la visualización correcta cuando el bat o cmd está guardado ya sea en ANSI o en UTF8, siempre que se haya utilizado el carácter ASCII; solo lo obtengo si añado la secuencia CHCP 65001 al archivo ANSI y lo guardo en UTF8.

La moralidad es que CHCP 65001 no es suficiente y que hay que convertir por lotes todos los archivos de ANSI a UTF8, ver por ejemplo aquí, reemplazando por supuesto unicode por utf-8 y csv por bat o cmd.

https://stackoverflow.com/questions/44157064/need-to-batch-convert-a-large-quantity-of-text-files-from-ansi-to-unicode

De manera subsidiaria:

-Si no quiero ver la visualización, escribir CHCP 65001>NUL

-En un cierto número de casos (de memoria, por ejemplo ROBOCOPY), es el mismo comando el que devuelve caracteres exóticos incluso en ausencia de acentos, entonces hay que ingresar CHCP 1252>NUL, que se alternará según sea necesario con 65001 en su archivo de comandos.

0
brucine Mensajes publicados 24642 Fecha de registro   Estado Miembro Última intervención   4 139
 

Además, si la cuestión es modificar todos los archivos sin abrirlos, tendré que abrirlos uno por uno, además de volver a guardar para añadir
CHCP 65001>NUL.

El problema es que si quiero ocultar la visualización de este comando, no debe tener lugar en la primera línea de cada archivo, sino en la segunda, después del comando @echo off.

La pregunta es fácil de resolver con una utilidad y/o un comando apropiado en el mundo de Linux, mucho menos en Windows con un batch bruto.

Se puede, si acaso, inspirarse en algo como esto, pero probablemente sea más rápido modificar manualmente cada archivo en el momento de su uso.

https://msfn.org/board/topic/118835-prepend-or-interpend-text-to-a-text-file-via-batch-script/
 

0
Rezona
 

Hola,

Gracias por la respuesta.

Voy a intentar precisar un poco más :

1) Uso el bloc de notas y escribo el código necesario asegurándome de reemplazar los caracteres especiales gracias al código "ALT + (código)". Por ejemplo :

Call "C:\ProgramData\Microsoft\Windows\Start Menu\Documents a verificar.lnk"

reemplazo "à" por "ALT + 0133"

y reemplazo "é" por "ALT + 0130"

Lo que da :

Call "C:\ProgramData\Microsoft\Windows\Start Menu\Documents … v‚rifier.lnk"

Guardado en ANSI, esto funciona perfectamente en un Windows francés.

> Por razones de compatibilidad, debo cambiar mi método.

2) Obviamente, debo abrir cada archivo ".bat" para hacer las modificaciones: añadir CHCP 65001 + añadir los acentos especiales sin modificaciones + codificación en UTF-8. Sin embargo, no deseo ejecutarlos uno a uno para verificar que las operaciones se realizan sin errores.

En resumen, la pregunta principal es :

¿Podrían "CHCP 65001" + "UTF-8" causar problemas de ejecución del código .bat (call, start, rd, variable...) en comparación con mi base ANSI?

Si no, la solución me conviene.

* No deseo usar PowerShell.

0
brucine Mensajes publicados 24642 Fecha de registro   Estado Miembro Última intervención   4 139
 

Hola,

Lo entendí bien, pero, como se dijo anteriormente, sin CHCP 65001 no puedo reproducir el comportamiento: si introduzco caracteres ALT, la visualización no es correcta, ya sea que esté guardado en ANSI o UTF-8, esto puede deberse a la fuente del sistema de la consola según la versión del sistema operativo.

Se vuelve correcto si ejecuto:

@echo off CHCP 65001>NUL echo "C:\ProgramData\Microsoft\Windows\Start Menu\Documents ALT 133 vALT 130.lnk" pause

guardado en UTF-8 y no afecta a los comandos ya que las rutas se leen correctamente.

Dado que el efecto parece depender de la versión, te invito a hacer una prueba creando el batch anterior, si funciona para uno, funcionará para todos.

Por cierto, y en caso de que en otras situaciones que no sean los batchs, los caracteres ASCII, incluidos los espacios, son una fuente de problemas: en esta situación prefiero llamar a mi archivo

Documentos_a_verificar

0
brucine Mensajes publicados 24642 Fecha de registro   Estado Miembro Última intervención   4 139 > brucine Mensajes publicados 24642 Fecha de registro   Estado Miembro Última intervención  
 

La salida de la consola puede, de hecho, que no me acuerde, ser independiente de la correcta ejecución del comando.

Aparte del aspecto estético de la cuestión para los comandos echo, puedes probar si tienes tiempo que perder con una prueba como la anterior donde en lugar de echo en 3, por ejemplo, copiamos el archivo a otro lugar.

0