En un cuadro de Windows 10, a través de la línea de comando, ejecuto este comando:
C:\Users\idiot\Music>dir /a:d /s /b >> tom-music-2016-julio.txt
El propósito es enumerar todos los directorios. Pero he notado que los directorios con letras no romanas en el nombre imprimirán ????? en lugar de los caracteres rusos o chinos. ¿Por qué?
Al principio pensé que el problema estaba en las fuentes del sistema. (No tengo instalado un paquete de idioma ruso). Pero puedo cambiar el nombre de los archivos a nombres rusos en Win Explorer. Es importante destacar que cuando ejecuto el comando DIR en la ventana (sin conectarlo a un archivo de salida),Puede ver claramente los caracteres rusos..
Eso implica para mí que el problema está en el comando que canaliza algo a un archivo o en el editor de texto de Windows que intenta leer el resultado.
Intenté abrir el archivo en 2 editores de texto separados e incluso en un navegador web, pero veo signos de interrogación de todos modos.
¿Alguien puede sugerir una causa de este problema y una posible solución?
¿Estoy en lo cierto al suponer que no necesitaré realizar ningún procesamiento en los archivos o directorios? Gracias.
Posdata:Particularmente me ha intrigado saber por qué los caracteres rusos se muestran bien en la ventana de la consola, pero cuando se canalizan a un archivo, veo los signos de interrogación.
Respuesta1
Nada secreto: la codificación de un archivo creado mediante >
la redirección sigue la página de códigos activa actual de cmd
. El ?
(un signo de interrogación) es simplemente un sustituto (marcador de reemplazo) si un carácter no existe en dicha página de códigos.
Solución: utilizar UTF-8
(página de códigos 65001)comochcp 65001
El siguiente ejemplo ilustra (y tal vez prueba) bastante bien:
d:\bat\UnASCII Names> chcp 1250
Active code page: 1250
d:\bat\UnASCII Names> dir /b /AD >dir1250.txt
d:\bat\UnASCII Names> chcp 65001
Active code page: 65001
d:\bat\UnASCII Names> dir /b /AD >dir65001.txt
Los archivos dir1250.txt
y dir65001.txt
abiertos en Notepad++:
Tenga en cuenta queasí llamadoANSI
es la página de códigos 1250 (Europa Central) en mi ubicación, mientras que la suya podría ser, por ejemplo, 1252 (EE. UU. y Europa Occidental)...