Cambiar la página de códigos predeterminada de la consola de Windows a UTF-8

124

Actualmente estoy ejecutando Windows 7 x64 y generalmente quiero que todas las herramientas de consola funcionen con UTF-8 en lugar de con la página de códigos predeterminada 850.

La ejecución chcp 65001en el símbolo del sistema antes del uso de cualquier herramienta ayuda, pero ¿hay alguna forma de establecerla como página de códigos predeterminada?

Actualizar:

Cambiar el HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPvalor para 65001hacer que el sistema no pueda iniciarse en mi caso.

El cambio propuesto de HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorunto @chcp 65001>nulsirvió muy bien para mi propósito. (gracias a Ole_Brun )

Regente
fuente
Tenga en cuenta que la solución propuesta podría romper el archivo find.exe de Windows (lo que causaría problemas con la compilación del SDK de Android): superuser.com/questions/176737/…
J Rao
Hm, cuando uso chcp 65001, la consola de Windows se bloquea cuando hago dir, pero me ayuda simplemente iniciar cmd.exe con el indicador / u (nb: usa unicode porque no se refleja en la salida de chcp.com)
eckes
10
La consola de Windows está plagada de errores cuando la codificación se establece en una página de códigos de varios bytes no compatible como 65001. Cualquier software que use los recuentos de salida de las API Win32 WriteFile / ReadFile obtendrá los resultados incorrectos y, en consecuencia, las cosas se construirán en eso, como los MSVCRT. La implementación de stdlib producirá resultados mutilados / repetidos y se bloqueará la entrada cuando se enfrente a no ASCII. Hasta que MS llegue a arreglarlo, y han pasado décadas sin que eso ocurra, cambiar la página de códigos de la consola globalmente a 65001 es una idea extraordinariamente mala .
bobince
2
Cualquier uso de las Aversiones de las funciones de Windows está roto. Todo el código debe ser portado para usar las Wversiones.
Demi
1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCPse usa como respaldo para entornos no unicode (no utf), obviamente intenta forzarlo a un 'unicode', ya que ve que es controvertido por definición. Windows se bloquea probablemente porque algunas cosas del sistema en el arranque dependen del juego de caracteres no Unicode para funcionar.
venimus

Respuestas:

99

Para cambiar la página de códigos solo para la consola, haga lo siguiente:

  1. Inicio -> Ejecutar -> regedit
  2. Ir [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun]
  3. Cambiar el valor a chcp 65001
Nils Magne Lunde
fuente
1
@Regent En la pregunta, el valor de registro que mencionó que funcionó para usted es @chcp 65001>nul, mientras que en esta respuesta aceptada, lo es chcp 65001. ¿Cuáles son las diferencias entre los dos?
galacticninja
77
@galacticninja simplemente poniendo chcp 65001hará que cada símbolo del sistema abierto imprima 'Página de código activo: 65001' mientras @chcp 65001>nulque evitará cualquier salida.
Regente
77
Autorunno está presente para mí en Windows 8.1.
kleinfreund
2
@kleinfreund @Luke: si Autorunno está presente, puede agregar un nuevo valor de cadena con el contenido de@chcp 65001>nul
Dacto
1
@ Dr.jacky No estoy seguro exactamente de lo que quieren decir con peligroso. Acabo de responder la pregunta del OP. Si debe hacerlo o no es una pregunta diferente. Creo que puede haber algunos problemas con Python, por lo que es posible que desee verificar eso antes de configurar la página de códigos en 65001 al menos.
Nils Magne Lunde
39

Personalmente, no me gusta cambiar el registro. Esto puede causar muchos problemas. Creé un archivo por lotes:

@ECHO OFF
REM change CHCP to UTF-8
CHCP 65001
CLS

Lo C:\Windows\System32guardé como switch.bat.

Creé un enlace para cmd.exe en el escritorio.

En las propiedades del acceso directo de cmd, cambió el destino a: C:\Windows\System32\cmd.exe /k switch

Voilá, cuando necesito escribir UTF-8, uso este enlace.

juca
fuente
77
Tenga en cuenta que se imprimirá Active code page: 65001en stdout. Entonces, si está haciendo algo como CHCP 65001 && mycommand.exeesto, obtendrá la página de códigos impresa al comienzo. NecesitasCHCP 65001 >nul && mycommand.exe
frumbert
32

Archivo de registro:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:fde9
  1. El valor debe estar en hexadecimal
  2. La línea superior debe incluirse exactamente como está
  3. HKEY_CURRENT_USER no se puede abreviar
  4. dword no se puede omitir

Símbolo del sistema:

REG ADD HKCU\Console\%SystemRoot^%_system32_cmd.exe /v CodePage /t REG_DWORD /d 65001
  1. El valor puede estar en dec o hexadecimal
  2. % SystemRoot% debe escapar
  3. REG_DWORD no se puede omitir

Potencia Shell:

New-Item -ErrorAction Ignore HKCU:\Console\%SystemRoot%_system32_cmd.exe
Set-ItemProperty HKCU:\Console\%SystemRoot%_system32_cmd.exe CodePage 65001
  1. El valor puede estar en dec o hexadecimal
  2. -Type DWord se supone con PowerShell 3+
  3. Puedo usar ni -> New-Item
  4. Puedo usar sp -> Set-ItemProperty
  5. Puedo usar -ea 0 -> -ErrorAction Ignore

Cygwin:

regtool add '\HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe'
regtool set '\HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe\CodePage' 65001
  1. El valor puede estar en dec o hexadecimal
  2. Puedo usar / -> \
  3. Puedo usar HKCU -> HKEY_CURRENT_USER
  4. Puedo usar user -> HKEY_CURRENT_USER
Steven Penny
fuente
No funcionó en Windows 10. Lo que sí funciona es crear una ejecución automática que establezca la página de códigos mediante el comando chcp. Por ejemplo,
George
Lo que quise decir antes de que la edición expirara groseramente fue un problema chcp 65001en un archivo de comando de ejecución automática. Ver stackoverflow.com/a/17405182/315083
George
La cuestión es que solo funciona para CMD, pero no para la consola en sí misma.
AnrDaemon
5

El comando para cambiar la página de códigos es chcp <codepage>. Ejemplo: chcp 1252. Debe escribirlo en una ventana de Powershell. Para evitar la molestia de escribirlo cada vez (si siempre tiene que cambiar la página de códigos), puede agregarlo a la línea de comando del programa. Para hacerlo, sigue estos pasos:

  1. Haga clic derecho en el icono de Powershell en el menú Inicio y elija "Más"> "Abrir ubicación de archivo".
  2. Haga clic derecho en el acceso directo de Powershell y seleccione "Propiedades".
  3. Agregue lo siguiente al final de la línea de comando "Destino": -NoExit -Command "chcp 1252"

Sea feliz. No te preocupes con el Registro de Windows a menos que no tengas otra opción.

JColares
fuente
Este funcionó perfectamente para mí. -NoExit -Command "chcp 1252 > null"también omite el mensaje sobre la página de códigos seleccionada al principio.
CodeMonkey
5

Esto se puede hacer creando un perfil de PowerShell y agregando el comando "chcp 65001> $ null":

PS> Set-ExecutionPolicy RemoteSigned
PS> New-Item -Path $Profile -ItemType file -Force
PS> notepad $Profile

Esto no requiere editar el registro y, a diferencia de editar un acceso directo, funcionará si PowerShell se inicia en una carpeta específica usando el menú contextual del Explorador de Windows.

Freon Sandoz
fuente
1
@PimpJuiceIT, no ... mira la primera línea de esta respuesta.
Dacto
4

En la versión 1809 de Windows 10, he logrado resolver esto permanentemente yendo al sistema Language settings, seleccionando Administrative language settings, haciendo clic Change system locale...y marcando la Beta: Use Unicode UTF-8 for worldwide language supportcasilla y luego reiniciando mi PC.

De esta manera, se aplica a todas las aplicaciones, ¡incluso a aquellas que no inicio desde un símbolo del sistema!
(Lo cual era necesario para mí, ya que estaba tratando de editar el código Agda desde Atom).

Isti115
fuente