¿Cómo usar caracteres unicode en la línea de comandos de Windows?

317

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 ?

Vilx-
fuente
1
@JohannesDewender - ¿Copiar y pegar salió mal?
Vilx-
2
Python 3.6: "la consola predeterminada en Windows acepta todos los caracteres Unicode con esa versión" (bueno, la mayoría para mí) PERO necesita configurar la consola: haga clic derecho en la parte superior de las ventanas (del cmd o el IDLE de Python ), en default / font elige la "consola de Lucida".
JinSnow
Posible duplicado de Cómo
generar
2
@ LưuVĩnhPhúc: no, se trata de pasar argumentos de línea de comandos Unicode, en lugar de mostrar texto en la consola. La consola podría no involucrarse en absoluto.
Vilx-

Respuestas:

68

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:

  • CMDy "consola" son factores no relacionados. CMD.exees solo uno de los programas que están listos para "trabajar dentro" de una consola ("aplicaciones de consola").
  • AFAIK, CMDtiene soporte perfecto para Unicode; puede ingresar / generar todos los caracteres Unicode cuando cualquier página de códigos está activa.
  • La consola de Windows tiene MUCHO soporte para Unicode, pero no es perfecta (solo "lo suficientemente buena"; ver más abajo).
  • chcp 65001es 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 problemas cp65001, pero el resto sigue siendo aplicable a Win10 .
  • Yo trabajo en cp1252. Como ya dije: para ingresar / emitir Unicode en una consola, no es necesario configurar la página de códigos .

Los detalles

  • Para leer / escribir Unicode en una consola, una aplicación (o su biblioteca de tiempo de ejecución C) debe ser lo suficientemente inteligente como para usar no File-I/OAPI, sino Console-I/OAPI. (Por ejemplo, vea cómo lo hace Python ).
  • Del mismo modo, para leer los argumentos de la línea de comandos Unicode, una aplicación (o su biblioteca de tiempo de ejecución C) debe ser lo suficientemente inteligente como para usar la API correspondiente.
  • La representación de fuente de la consola solo admite caracteres Unicode en BMP (en otras palabras: a continuación 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:

    • Para la salida: una fuente de consola completa. Para mejores resultados, recomiendo mis compilaciones . (Las instrucciones de instalación están presentes allí, y también figuran en otras respuestas en esta página).
    • Para entrada: un diseño de teclado capaz. Para mejores resultados, recomiendo mis diseños .
    • Para entrada: permita la entrada HEX de Unicode .
  • Otro problema con "Pegar" en una aplicación de consola (muy técnico):

    • La entrada HEX entrega un carácter KeyUpde Alt; todas las otras formas de entregar un personaje suceden KeyDown; tantas aplicaciones no están listas para ver un personaje KeyUp. (Solo aplicable a aplicaciones que usan Console-I/OAPI).
    • Conclusión: muchas aplicaciones no reaccionarían en eventos de entrada HEX.
    • Además, lo que sucede con un carácter "Pegado" depende de la distribución actual del teclado: si el carácter se puede escribir sin usar teclas de prefijo (pero con una combinación arbitraria complicada de modificadores, como en 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.
    • Sin embargo, los "otros" caracteres se entregan emulando la entrada HEX .

    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 cuandoPastea 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/OAPI, 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 suelte WinKey, luego escriba powershell.


(Por otro lado, hay programas como ConEmuo ANSICONque intentan hacer más: "intentan" interceptar las Console-I/OAPI 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/OAPI y acepte argumentos de línea de comandos Unicode. Por ejemplo, cualquier cygwinprograma compilado debería estar bien. Como ya dije, CMDestá 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.

Ilya Zakharevich
fuente
OK, para algo tan minucioso, ¡mereces ser la respuesta aceptada! ¡Increíble!
Vilx-
55
Soy un novato en C ++ y no puedo entender esta respuesta después de leer detenidamente. ¿Alguien puede ayudarme con esto o dar una explicación más fácil?
Rick
@Bachi Gracias a Bachi, descubrí que a la v73 de mi diseño de teclado (mencionado anteriormente) le faltaban algunos archivos de soporte. Ahora arreglado! (A juzgar por mis .logarchivos, es un error intermitente en zip -ru[?!]. No tengo idea de cómo depurarlo, o evitarlo en el futuro ...)
Ilya Zakharevich
@ Rick: ¡Correcto! Agregué un enlace a una solución alternativa en Python (pero no puedo encontrar un enlace directo al parche en este momento ...).
Ilya Zakharevich
@IlyaZakharevich: D Gracias. Pero de alguna manera renuncio a usar Unicode en Windows. Voy a usar Linux más tarde.
Rick
387

Tratar:

chcp 65001

que cambiará la página de códigos a UTF-8. Además, debe usar las fuentes de consola Lucida.

kgiannakakis
fuente
18
¿Sabes si hay una manera de hacer que esto sea el predeterminado?
AnnanFay
82
Tenga en cuenta que hay errores de implementación serios en el soporte de la página de códigos 65001 de Windows que romperá muchas aplicaciones que dependen de los métodos de E / S de la biblioteca estándar de C, por lo que esto es muy frágil. (Los archivos por lotes también dejan de funcionar en 65001.) Desafortunadamente, UTF-8 es un ciudadano de segunda clase en Windows.
bobince
77
@bobince ¿Tiene un ejemplo de error en el soporte de la página de códigos 65001 de Windows? Tengo curiosidad porque nunca me he encontrado con uno, y googlear tampoco apareció nada. (Los archivos por lotes dejan de funcionar, por supuesto, pero UTF-8 no es un ciudadano de segunda clase ...)
Roman Starkov
17
@romkyns: Entiendo que las llamadas que devuelven un número de bytes (como fread / fwrite / etc.) en realidad devuelven un número de caracteres. Esto causa una amplia variedad de síntomas, como la lectura de entrada incompleta, cuelga en color, los archivos por lotes rotos, etc. Algunos antecedentes. Las páginas de códigos predeterminadas utilizadas para las configuraciones regionales "multibyte" de CJK tienen un manejo especial incorporado para solucionar esto, pero 65001 no lo hace, no es compatible .
bobince
77
Sin embargo, la pregunta interesante aquí es: ¿es el error porque debería informar bytes y en su lugar informa caracteres? ¿O porque las aplicaciones que lo usan han asumido bytes = caracteres incorrectamente? En otras palabras, ¿es un error de API o un error de uso de API?
Básico
36

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:

chcp 1250
copy "O:\VEŘEJNÉ\ŽŽŽŽŽŽ\Ž.xls" c:\temp

El archivo por lotes debe guardarse en CP 1250.

Tenga en cuenta que la consola no mostrará los caracteres correctamente, pero los comprenderá ...

vanna
fuente
1
¡Salud! Necesitaba esto para poder ingresar el carácter de copyright dentro de mi archivo por lotes.
Lea Hayes
Esto funcionó perfectamente para mí también en una situación casi idéntica a la suya. En cambio mi camino contenía caracteres gaélico irlandés, es decir á, é, í, ó, y ú.
Seany84
@vanna que resuelve mis "caracteres turcos y espacios en la ruta en el problema de red". eres genial.
caglaror
2
Probablemente solo necesitaba usar una fuente diferente para mostrar también los caracteres correctamente, Lucida Console funcionó para mí.
Vlastimil Ovčáčík
29

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í:

Cambio de idioma para programas no Unicode

Maxim Yefremov
fuente
66
Eso no habilita la compatibilidad con Unicode cmd, solo cambia la página de códigos predeterminada a la cp866que sigue siendo un juego de caracteres de 8 bits. Incluso usa en cp866lugar de lo cp1251que agrega su propia carga de problemas.
ivan_pozdeev
1
Veo también a contestar a continuación para nueva opción en las nuevas versiones de Windows 10
Zvi
14

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 Processory agregue String value Autorun= chcp 65001.

O puede usar este pequeño Batch-Script para las páginas de códigos más comunes.

@ECHO off

SET ROOT_KEY="HKEY_CURRENT_USER"


FOR /f "skip=2 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /v OEMCP') do set OEMCP=%%i

ECHO System default values:

ECHO.
ECHO ...............................................
ECHO Select Codepage 
ECHO ...............................................
ECHO.
ECHO 1 - CP1252
ECHO 2 - UTF-8
ECHO 3 - CP850
ECHO 4 - ISO-8859-1
ECHO 5 - ISO-8859-15
ECHO 6 - US-ASCII
ECHO.
ECHO 9 - Reset to System Default (CP%OEMCP%)
ECHO 0 - EXIT
ECHO.


SET /P  CP="Select a Codepage: "

if %CP%==1 (
    echo Set default Codepage to CP1252
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 1252>nul" /f
) else if %CP%==2 (
    echo Set default Codepage to UTF-8
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 65001>nul" /f
) else if %CP%==3 (
    echo Set default Codepage to CP850
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 850>nul" /f
) else if %CP%==4 (
    echo Set default Codepage to ISO-8859-1
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28591>nul" /f
) else if %CP%==5 (
    echo Set default Codepage to ISO-8859-15
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28605>nul" /f
) else if %CP%==6 (
    echo Set default Codepage to ASCII
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 20127>nul" /f
) else if %CP%==9 (
    echo Reset Codepage to System Default
    reg delete "%ROOT_KEY%\Software\Microsoft\Command Processor" /v AutoRun /f
) else if %CP%==0 (
    echo Bye
) else (
    echo Invalid choice
    pause
)

El uso en @chcp 65001>nullugar de chcp 65001suprime 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"

Wernfried Domscheit
fuente
¡Buena idea y ejemplo útil también!
13

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.

Usuario
fuente
2
Esto es probablemente un poco peligroso, ya que podría tener un conflicto de nombres. por ejemplo, si tiene dos archivos que se representan como "???" e ingresa "cd ???" no sabría cuál usar (o peor, elegiría uno arbitrario).
John
26
No ingresas ???, ingresas el nombre real, solo se muestra como ???. Piense en ello como en un cuadro de entrada de contraseña. Lo que ingrese se muestra como ***, pero se envía el texto original.
Usuario
De hecho, esto funciona para los comandos que se ejecutan directamente en el símbolo del sistema. Sin embargo, con la ejecución de un .cmdarchivo por lotes, todavía necesito colocar chcp 65001en la parte superior del archivo por lotes.
wisbucky
En su caso, es un problema de fuente ... el contenido está ahí, simplemente no hay una fuente adecuada para mostrarlo. Pero OP es diferente.
WesternGun
11

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:

    REG query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont"

Verás una salida como:

    0    REG_SZ    Lucida Console
    00    REG_SZ    Consolas
    936    REG_SZ    *新宋体
    932    REG_SZ    *MS ゴシック

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":

    REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" /v 000 /t REG_SZ /d "Courier New"

Ahora implementamos soporte UTF-8:

    REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 65001 /f

Establezca la fuente predeterminada en "Courier New":

    REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Courier New" /f

Establezca el tamaño de fuente en 20:

    REG ADD HKCU\Console /v FontSize /t REG_DWORD /d 20 /f

Habilite la edición rápida si lo desea:

    REG ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f
Alon Or
fuente
3
En general, usar la página de códigos 65001 solo funcionará sin errores en Windows 10 con la actualización Creators. En Windows 7 tendrá errores de salida y entrada. En Windows 8 y versiones anteriores de Windows 10 solo tiene el error de entrada, que limita la entrada a ASCII de 7 bits.
Eryk Sun
6

Como no he visto ninguna respuesta completa para Python 2.7, describiré los dos pasos importantes y un paso opcional que es bastante útil.

  1. Necesita una fuente con soporte Unicode. Windows viene con la consola Lucida, que se puede seleccionar haciendo clic derecho en la barra de título del símbolo del sistema y haciendo clic en la Defaultsopció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) eligiendo Propertiesen su lugar.
  2. Debe establecer la página de códigos en cp65001, que parece ser el intento de Microsoft de ofrecer soporte UTF-7 y UTF-8 al símbolo del sistema. Haga esto ejecutando chcp 65001en 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_SZentrada (String) usando regedit en HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processory asígnele un nombre AutoRun. Cambia el valor de esto a chcp 65001. Si no desea ver el mensaje de salida del comando, use @chcp 65001>nulen 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.

Aaron3468
fuente
5

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"

Panel de control -> Configuración regional -> pestaña Administrativo-> Cambiar configuración regional del sistema ...

Configuraciones de región

zvi
fuente
¿Cómo lograr esto usando powershell o cmd?
Corey
Estoy tratando de mostrar caracteres chinos en la consola y hacerlo no funcionó en Windows 10 de 64 bits (instalado en turco y luego cambiado a inglés). A continuación, intentaré instalar el idioma chino y ver si funciona.
akinuri
4

Una opción realmente simple es instalar un shell bash de Windows como MinGW y usar eso:

Ingrese la descripción de la imagen aquí

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.

Ingrese la descripción de la imagen aquí

Por supuesto, también obtienes todos los productos habituales * nix como grep, find, less, etc.

Steve Barnes
fuente
En este caso (antiguo), el problema era con un script en lugar de una consola. ¿Usar los guiones bash resolvería esto?
Vilx-
Sí, de hecho, los scripts de bash de madera se pueden marcar como UTF-8 y simplemente funcionan con mucha más potencia que los archivos por lotes de Windows. Sé que era un caso antiguo, pero pensé que valía la pena marcar la opción para futuras referencias ya que MS no parece estar mejorando mucho en Unicode.
Steve Barnes
grep , find , y menos .
Peter Mortensen el
La salida de caracteres codificados UTF-8 está bien. Pero la entrada todavía está codificada por la página de códigos del sistema.
Rick
1
Solo para agregar que los usuarios de Windows ya pueden tener un shell bash si usas Git: solo abre una ventana Git> Git Bash .
skomisa
3

Para un problema similar, (mi problema era mostrar caracteres UTF-8 de MySQL en un símbolo del sistema),

Lo resolví así:

  1. 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).

  2. 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.

Christoforos
fuente
77
Windws-1253 no es una página de códigos Unicode. Es una página de códigos estándar de 256 caracteres. Aparentemente solo usaste caracteres que se pueden mostrar en esa página de códigos, pero no será universal.
Vilx-
3

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 diro lssi instaló Ubuntu bash en Windows 10

  1. Establezca la región para admitir caracteres no utf 8.

  2. 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

  1. Cambia la página a utf-8 por chcp 65001
  2. Cambie a la fuente que admite utf-8, como Lucida Console
  3. Use el typecomando para ver el contenido del archivo, o catsi instaló Ubuntu bash en Windows 10
  4. Tenga en cuenta que, después de configurar la codificación de la consola en utf-8, no puedo escribir caracteres chinos en el cmd usando el método de entrada chino.

La solución más perezosa: solo use un emulador de consola como http://cmder.net/

code4j
fuente
Esto no fue para mí. Los caracteres chinos en la salida del pointcomando todavía están confusos.
Ssuching Yu
@SiqingYu Renuncio a la loca configuración. Solo use blog.miniasp.com/post/2015/09/27/Useful-tool-Cmder.aspx
code4j
Utilicé Cmder antes, pero no puede reemplazar la consola de desarrollador utilizada por Visual Studio.
Ssuching Yu
@SiqingYu ¿Te refieres a la potencia interactiva de C #?
code4j
No el shell interactivo de energía, sino la consola del desarrollador, utilizada también por Visual C ++. Es la consola de depuración predeterminada en los proyectos de la Aplicación de consola Win32.
Ssuching Yu
2

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.

Robert Boehne
fuente
Ahh, no, lo siento, pero te perdiste la pregunta. Esto es para cuando estoy escribiendo un programa que recibirá los caracteres Unicode. Mi pregunta fue sobre el envío de los caracteres Unicode a otro programa (que con suerte admite recibirlos, pero realmente no tengo forma de saberlo, excepto el desmontaje).
Vilx-
2

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/Terminalnúmero 387 :

Hay 87.887 ideógrafos actualmente en Unicode. ¿También los necesitas a todos?
Necesitamos un límite, y los caracteres más allá de ese límite deben ser manejados por el retorno de fuente / enlace de fuente / lo que sea.

Lo que deben cubrir las consolas:

  • Caracteres que se usan como símbolos que usan los programas OSS modernos en la CLI.
  • Estos personajes deben seguir el diseño y las métricas de Consolas, y estar correctamente alineados con los personajes de Consolas existentes.

Lo que las consolas NO deberían cubrir:

  • Caracteres y puntuación de los guiones que más allá del latín, griego y cirílico, especialmente los caracteres necesitan formas complejas (como el árabe).
  • Estos caracteres deben manejarse con la fuente de reserva.
VonC
fuente
1

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:

  1. copy con temp.txt [presione Entrar]
  2. Escriba la ruta / nombre del archivo [presione Entrar]
  3. Presione Ctrl-Z [presione Entrar]

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).

S. Hristov
fuente
1

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.

Mike Beckerle
fuente
1

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 ^ §.

madhav bitra
fuente
Gracias funciona! No sé por qué las personas rechazaron esto, es una alternativa válida para algunas personas. Esta página de códigos 1252 también soluciona el problema en Windows Server 2012, donde el mismo código con CP 65001 no funcionó para mí. Supongo que depende de la página de códigos con la que se editó el script por lotes o de la configuración predeterminada del sistema operativo. En este caso, se creó con el Bloc de notas en una máquina MUI alemana con sistema operativo base en EE. UU.
Tony Wall
0

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.

Miguel
fuente