Preguntas sobre cómo realizar entradas/salidas y tuberías Unicode aparecen periódicamente en la página Foros de soporte de JP Software. Puede ser un problema complicado debido a la forma en que se construyó Windows: utilizando principalmente archivos ASCII externamente, pero UTF16 para la mayoría de las API de Windows. Esto significa que cada vez que el procesador de comandos (TCC o CMD) lee un archivo ASCII, tiene que convertirlo a UTF-16 antes de poder llamar a una API o mostrarlo en la pantalla. Y cuando realiza la redirección de salida a un archivo (es decir, “dir > file.dat”), el procesador de comandos tiene que convertirlo de UTF16 a ASCII. Desafortunadamente, esta conversión ASCII -> UTF16 -> ASCII no es 100% confiable. Dependiendo de su página de códigos y fuente, el ASCII que ingresa a Windows no siempre coincidirá con el ASCII que regresa.
Una solución es utilizar Unicode en lugar de ASCII. TCC puede manejar de forma transparente archivos ASCII o Unicode (ya sea UTF16 o UTF8) en cualquier lugar donde busque entrada de archivos. Si configura la directiva "Salida Unicode" en TCC (OPCIÓN / Inicio), TCC utilizará UTF16 para la redirección de salida o canalización, y buscará UTF16 en su entrada de canalización. Este enfoque funciona bien si estás usando TCC comandos internos o aplicaciones externas que reconocen archivos UTF16.
Alternativamente, la versión actual de TCC También te permite usar UTF8 (muy utilizado por todo excepto Windows) para entrada y salida. Esto requiere deshabilitar la directiva "salida Unicode" y configurar tres cosas:
- Cambie su página de códigos a 65001 (ingrese “chcp 65001″ cuando se le solicite).
- Agregue la directiva "UTF8Output=Yes" a su archivo TCMD.INI en la sección [4NT].
- Vaya a OPCIÓN/Inicio y seleccione la opción “UTF8″.
TCC Luego tratará todos los archivos de entrada como UTF8 y escribirá toda su salida como UTF8.
Pero muchas aplicaciones de Windows (incluida CMD) no pueden manejar archivos UTF16 o UTF8. Entonces, ¿cómo podemos mezclar nuestros formatos (a veces leer y escribir ASCII y otras veces Unicode)? TCC tiene opciones para hacer esto:
- >:a – La salida redirigida (STDOUT y/o STDERR) es ASCII (caracteres de 8 bits)
- >:u – La salida redirigida es UTF16 Unicode
- >:8 o >:u8 – La salida redirigida es UTF8
- >>:a – La salida redirigida adjunta es ASCII
- >>:u – La salida redirigida adjunta es UTF16 Unicode
- >>:8 o >>:u8 – La salida redirigida adjunta es UTF16
Y puedes hacer lo mismo con las tuberías:
- |:a – La salida canalizada es ASCII
- |:u – La salida canalizada es UTF16
- |:8 o |:u8 – La salida canalizada es UTF8
La combinación de estas opciones nos permite configurar TCC para satisfacer nuestras necesidades, ya sea principalmente Unicode con excepciones para aplicaciones que no pueden manejarlo, o principalmente ASCII con excepciones para aplicaciones que pueden aceptar (o requerir) UTF8 o UTF16. Consulte también el TCC comando interno TUBO, que admite UTF8 y UTF16 y tiene una amplia variedad de opciones de conversión.