Tenemos un proyecto en Team Foundation Server (TFS) que tiene un carácter que no es inglés (š). Al intentar escribir algunas cosas relacionadas con la compilación, nos topamos con un problema: no podemos pasar la letra š a las herramientas de línea de comandos. El símbolo del sistema o cualquier otra cosa lo estropea, y la utilidad tf.exe no puede encontrar el proyecto especificado.
He probado diferentes formatos para el archivo .bat (ANSI, UTF-8 con y sin BOM ), así como crear scripts en JavaScript (que es Unicode inherentemente), pero no tuve suerte. ¿Cómo ejecuto un programa y le paso una línea de comando Unicode ?
Respuestas:
Mi experiencia: uso la entrada / salida Unicode en una consola durante años (y lo hago mucho a diario. Además, desarrollo herramientas de soporte para exactamente esta tarea). Existen muy pocos problemas, en la medida en que comprenda los siguientes hechos / limitaciones:
CMD
y "consola" son factores no relacionados.CMD.exe
es solo uno de los programas que están listos para "trabajar dentro" de una consola ("aplicaciones de consola").CMD
tiene soporte perfecto para Unicode; puede ingresar / generar todos los caracteres Unicode cuando cualquier página de códigos está activa.chcp 65001
es muy peligroso. A menos que un programa se haya diseñado especialmente para evitar defectos en la API de Windows (o use una biblioteca de tiempo de ejecución C que tenga estas soluciones), no funcionaría de manera confiable. Win8 soluciona la mitad de estos problemascp65001
, pero el resto sigue siendo aplicable a Win10 .cp1252
. Como ya dije: para ingresar / emitir Unicode en una consola, no es necesario configurar la página de códigos .Los detalles
File-I/O
API, sinoConsole-I/O
API. (Por ejemplo, vea cómo lo hace Python ).U+10000
). Solo se admite la representación de texto simple (por lo que los idiomas europeos, y algunos de Asia oriental) deberían funcionar bien, siempre que se utilicen formularios precompuestos). [Aquí hay una letra pequeña para Asia oriental y para los caracteres U + 0000, U + 0001, U + 30FB.]Consideraciones prácticas
Los valores predeterminados en Window no son muy útiles. Para una mejor experiencia, uno debe ajustar 3 piezas de configuración:
Otro problema con "Pegar" en una aplicación de consola (muy técnico):
KeyUp
deAlt
; todas las otras formas de entregar un personaje sucedenKeyDown
; tantas aplicaciones no están listas para ver un personajeKeyUp
. (Solo aplicable a aplicaciones que usanConsole-I/O
API).Ctrl-Alt-AltGr-Kana-Shift-Gray*
), se entrega al presionar una tecla emulada. Esto es lo que cualquier aplicación espera, así que pegar todo lo que contenga solo esos caracteres está bien.Conclusión : a menos que su teclado soportes diseño de entrada de un montón de personajes sin teclas prefijo, algunas aplicaciones con errores puede omitir caracteres cuando
Paste
a través de la interfaz de usuario de la consola:Alt-Space E P
. ( Esto es por lo que recomendamos el uso de mis diseños de teclado!)También hay que tener en cuenta que las "consolas alternativas" más capaces "para Windows no son consolas en absoluto . No son compatibles con las
Console-I/O
API, por lo que los programas que dependen de estas API para funcionar no funcionarían. (Sin embargo, los programas que usan solo “API de E / S de archivos para los controladores de archivos de la consola” funcionarían bien).Un ejemplo de tal no consola es una parte de MicroSoft
Powershell
. No lo uso; para experimentar, presione y suelteWinKey
, luego escribapowershell
.(Por otro lado, hay programas como
ConEmu
oANSICON
que intentan hacer más: "intentan" interceptar lasConsole-I/O
API para que las "aplicaciones de consola verdaderas" funcionen también. Esto definitivamente funciona para programas de ejemplo de juguete; en la vida real, esto puede o no Es posible que no resuelva sus problemas particulares. Experimente.)Resumen
establece la fuente, la distribución del teclado (y, opcionalmente, permite la entrada HEX).
use solo programas que pasen por
Console-I/O
API y acepte argumentos de línea de comandos Unicode. Por ejemplo, cualquiercygwin
programa compilado debería estar bien. Como ya dije,CMD
está bien también.UPD: Inicialmente, para un error
cp65001
, estaba mezclando capas Kernel y CRTL ( UPD²: ¡ y API de modo de usuario de Windows!). Además: Win8 corrige la mitad de este error; Aclaré la sección sobre la aplicación "mejor consola" y agregué una referencia a cómo lo hace Python.fuente
.log
archivos, es un error intermitente enzip -ru
[?!]. No tengo idea de cómo depurarlo, o evitarlo en el futuro ...)Tratar:
que cambiará la página de códigos a UTF-8. Además, debe usar las fuentes de consola Lucida.
fuente
Tuve el mismo problema (soy de la República Checa). Tengo una instalación de Windows en inglés y tengo que trabajar con archivos en una unidad compartida. Las rutas a los archivos incluyen caracteres específicos checos.
La solución que funciona para mí es:
En el archivo por lotes, cambie la página del juego de caracteres
Mi archivo por lotes:
El archivo por lotes debe guardarse en CP 1250.
Tenga en cuenta que la consola no mostrará los caracteres correctamente, pero los comprenderá ...
fuente
á
,é
,í
,ó
, yú
.Verifique el idioma de los programas que no sean Unicode. Si tiene problemas con el ruso en la consola de Windows, debe configurar el ruso aquí:
fuente
cmd
, solo cambia la página de códigos predeterminada a lacp866
que sigue siendo un juego de caracteres de 8 bits. Incluso usa encp866
lugar de locp1251
que agrega su propia carga de problemas.Es bastante difícil cambiar la página de códigos predeterminada de la consola de Windows. Cuando busca en la web, encuentra diferentes propuestas, sin embargo, algunas de ellas pueden romper su Windows por completo, es decir, su PC ya no se inicia.
La solución más segura es esta: vaya a su clave de registro
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
y agregue String valueAutorun
=chcp 65001
.O puede usar este pequeño Batch-Script para las páginas de códigos más comunes.
El uso en
@chcp 65001>nul
lugar dechcp 65001
suprime la salida "Página de códigos activa: 65001" que obtendría cada vez que inicie una nueva ventana de línea de comandos.Una lista completa de todos los números disponibles que puede obtener de los identificadores de página de códigos
Tenga en cuenta que la configuración se aplicará solo para el usuario actual. Si desea configurarlo para todos los usuarios, reemplace la línea
SET ROOT_KEY="HKEY_CURRENT_USER"
porSET ROOT_KEY="HKEY_LOCAL_MACHINE"
fuente
En realidad, el truco es que el símbolo del sistema realmente comprende estos caracteres que no están en inglés, simplemente no puede mostrarlos correctamente.
Cuando ingreso una ruta en el símbolo del sistema que contiene algunos caracteres que no están en inglés, se muestra como "?? ?????? ?????". Cuando envía su comando (cd "??? ?????? ?????" en mi caso), todo funciona como se esperaba.
fuente
.cmd
archivo por lotes, todavía necesito colocarchcp 65001
en la parte superior del archivo por lotes.En una máquina Windows 10 x64, hice que el símbolo del sistema muestre caracteres que no están en inglés:
Abra un símbolo del sistema elevado (ejecute CMD.EXE como administrador). Consulte en su registro las fuentes TrueType disponibles en la consola de la siguiente manera:
Verás una salida como:
Ahora necesitamos agregar una fuente TrueType que admita los caracteres que necesita como Courier New. Hacemos esto agregando ceros al nombre de la cadena, por lo que en este caso el siguiente sería "000":
Ahora implementamos soporte UTF-8:
Establezca la fuente predeterminada en "Courier New":
Establezca el tamaño de fuente en 20:
Habilite la edición rápida si lo desea:
fuente
Como no he visto ninguna respuesta completa para Python 2.7, describiré los dos pasos importantes y un paso opcional que es bastante útil.
Defaults
opción. Esto también da acceso a los colores. Tenga en cuenta que también puede cambiar la configuración de las ventanas de comandos invocadas de ciertas maneras (por ejemplo, abrir aquí, Visual Studio) eligiendoProperties
en su lugar.cp65001
, que parece ser el intento de Microsoft de ofrecer soporte UTF-7 y UTF-8 al símbolo del sistema. Haga esto ejecutandochcp 65001
en el símbolo del sistema . Una vez establecido, permanece así hasta que se cierre la ventana. Deberá rehacer esto cada vez que inicie cmd.exe.Para una solución más permanente, consulte esta respuesta en Superusuario. En resumen, cree una
REG_SZ
entrada (String) usando regedit enHKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor
y asígnele un nombreAutoRun
. Cambia el valor de esto achcp 65001
. Si no desea ver el mensaje de salida del comando, use@chcp 65001>nul
en su lugar.Algunos programas tienen problemas para interactuar con esta codificación, MinGW es notable y falla al compilar con un mensaje de error sin sentido. Sin embargo, esto funciona muy bien y no causa errores con la mayoría de los programas.
fuente
Encontré este método tan útil en las nuevas versiones de Windows 10:
Active esta función: "Beta: Use Unicode UTF-8 para soporte de idiomas en todo el mundo"
fuente
Una opción realmente simple es instalar un shell bash de Windows como MinGW y usar eso:
Hay una pequeña curva de aprendizaje ya que necesitará usar la funcionalidad de línea de comandos de Unix, pero le encantará su poder y puede configurar el juego de caracteres de la consola en UTF-8.
Por supuesto, también obtienes todos los productos habituales * nix como grep, find, less, etc.
fuente
Para un problema similar, (mi problema era mostrar caracteres UTF-8 de MySQL en un símbolo del sistema),
Lo resolví así:
Cambié la fuente del símbolo del sistema a Lucida Console. (Este paso debe ser irrelevante para su situación. Tiene que ver solo con lo que ve en la pantalla y no con lo que realmente es el personaje).
Cambié la página de códigos a Windows-1253. Hace esto en el símbolo del sistema con "chcp 1253". Funcionó para mi caso donde quería ver UTF-8.
fuente
Este problema es bastante molesto. Por lo general, tengo caracteres chinos en mi nombre de archivo y contenido de archivo. Tenga en cuenta que estoy usando Windows 10, aquí está mi solución:
Para mostrar el nombre del archivo , como
dir
ols
si instaló Ubuntu bash en Windows 10Establezca la región para admitir caracteres no utf 8.
Después de eso, la fuente de la consola se cambiará a la fuente de esa configuración regional, y también cambia la codificación de la consola.
Después de haber realizado los pasos anteriores, para mostrar el contenido de un archivo UTF-8 usando la herramienta de línea de comando
chcp 65001
type
comando para ver el contenido del archivo, ocat
si instaló Ubuntu bash en Windows 10La solución más perezosa: solo use un emulador de consola como http://cmder.net/
fuente
point
comando todavía están confusos.Veo varias respuestas aquí, pero parece que no abordan la pregunta: el usuario desea obtener información Unicode desde la línea de comandos.
Windows usa UTF-16 para codificar en cadenas de dos bytes, por lo que debe obtenerlas del sistema operativo en su programa. Hay dos maneras de hacer esto -
1) Microsoft tiene una extensión que permite que main tome una amplia gama de caracteres: int wmain (int argc, wchar_t * argv []); https://msdn.microsoft.com/en-us/library/6wd819wh.aspx
2) Llame a la API de Windows para obtener la versión Unicode de la línea de comando wchar_t win_argv = (wchar_t ) CommandLineToArgvW (GetCommandLineW (), & nargs); https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw
Lea esto: http://utf8everywhere.org para obtener información detallada, especialmente si está dando soporte a otros sistemas operativos.
fuente
A partir de junio de 2019, con Windows 10, no tendrá que cambiar la página de códigos.
Consulte " Presentación de Windows Terminal " (de Kayla Cinnamon ) y Microsoft / Terminal .
Mediante el uso de la fuente Consolas, se proporcionará soporte parcial de Unicode.
Como se documenta en el
Microsoft/Terminal
número 387 :fuente
Una decisión rápida para los archivos .bat si su computadora muestra su ruta / nombre de archivo correcto cuando lo escribe en la ventana de DOS:
De esta manera, crea un archivo .txt: temp.txt. Ábralo en el Bloc de notas, copie el texto (no se preocupe, parecerá ilegible) y péguelo en su archivo .bat. Ejecutar el .bat creado de esta manera en la ventana de DOS funcionó para mí (cirílico, búlgaro).
fuente
Una cosa mejor que hacer: simplemente instale el paquete de idioma japonés de Microsoft disponible y gratuito. (Otros paquetes de idiomas orientales también funcionarán, pero he probado el japonés).
Esto le da las fuentes con los conjuntos de glifos más grandes, los convierte en el comportamiento predeterminado, cambia las diversas herramientas de Windows como cmd, WordPad, etc.
fuente
Cambiar la página de códigos a 1252 está funcionando para mí. El problema para mí es que el símbolo double doller § se está convirtiendo en otro símbolo por DOS en Windows Server 2008.
He usado CHCP 1252 y un límite antes en mi declaración de BCP ^ §.
fuente
Tuve un problema similar al eliminar archivos con nombre Unicode al referirme a ellos en el archivo por lotes por sus nombres cortos (8 puntos 3).
Los nombres cortos se pueden ver haciendo
dir /x
. Obviamente, esto solo funciona con nombres de archivo Unicode que ya se conocen.fuente