2011-04-26 19 views
23

Estoy tratando de configurar Mercurial para que imprima el estado del repositorio en el que me encuentro actualmente con PowerShell. Hasta ahora, tengo todo funcionando, pero me gustaría poder imprimir '☿' cuando se encuentre en un repositorio. Desafortunadamente, parece que PowerShell tiene algunos problemas con la impresión de caracteres Unicode.Imprimir caracteres Unicode en el indicador de PowerShell

En la respuesta aceptada para Is there a Windows command shell that will display Unicode characters? se sugiere que PowerShell v2, que se incluye con Windows 7   (que estoy usando) sería capaz de imprimir caracteres Unicode, pero me parece que no puede conseguir que funcione . Del mismo modo, la siguiente respuesta de usar chcp 65001 tampoco funciona.

¿Sigue siendo una deficiencia en PowerShell, o me falta algo obvio?

+0

¿Puede dar una copia impresa de lo que desea solicitar, o el código Unicode que desea solicitar con una tabla con su representación? – JPBlanc

+0

☿ a.k.a U + 263F – tghw

Respuesta

21

Esto no es una deficiencia de PowerShell. Es una deficiencia con el subsistema de la consola de Windows que utiliza PowerShell.exe. El subsistema de la consola no admite Unicode, sino páginas de códigos que datan de los días de DOS. El arreglo de PowerShell V2 se proporciona a través del entorno de scripting integrado de PowerShell o PowerShell_ISE.exe. Esta es una aplicación gráfica basada en WPF que puede manejar fácilmente caracteres Unicode.

En teoría se podría cambiar la página de códigos usando chcp o

[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(850) 

para mostrar diferentes personajes pero no he tenido mucha suerte con esto. También necesitaría encontrar una página de códigos que contenga el personaje que desea mostrar.

+8

La consola es compatible con Unicode, simplemente no hay mucho soporte de representación. Sin sustitución de fuentes, representación compleja de scripts, etc. Y bueno, con las fuentes Raster vuelves en los días de DOS, pero afortunadamente PowerShell usa una fuente TrueType como valor predeterminado. – Joey

+1

@Joey dices que admite Unicode, pero ¿de qué manera admite Unicode más de lo que hizo cmd? 'chcp 1200' falla' chcp 1201' falla. por lo que las páginas de códigos Unicode de 16 bits no son compatibles. Puede hacer chcp 65001, pero al parecer tiene errores y muchos archivos por lotes y C se cuelgan con él. Y es UTF-8 sin BOM. El Bloc de notas no puede crear un archivo en UTF-8 sin BOM. 'type' logra leer un archivo UTF-16 LE w BOM incluso con la página de códigos 65001 (que es UTF-8 sin BOM). Acepto que puede funcionar con Unicode hasta cierto punto, pero el soporte parece ser el mismo que tenía cmd. – barlop

+0

La consola tiene una representación limitada del rango Unicode completo ya que no está utilizando Uniscribe o DirectWrite. Pero eso no está relacionado con CMD, que es una aplicación Unicode. El principal problema es que CMD no admite listas de materiales UTF para establecer la codificación de un script por lotes o salida canalizada en un bucle 'for/f'. En cambio, depende de la página de códigos heredada de la consola, que puede establecer a través de chcp.com. El uso de la página de códigos 65001 (UTF-8) puede presentar errores para las aplicaciones de consola heredadas (por ejemplo, python.exe anterior a 3.6), por lo que debe cambiar solo temporalmente para seleccionar líneas en un script (por ejemplo, para leer un bloque de variables de entorno). – eryksun

6

No puede usar la consola predeterminada de PowerShell (es decir, Windows). Sin embargo, si usa PowerShell ISE (que proporciona su propia consola), funcionará. Sin embargo, no estoy seguro si esto satisfará tus necesidades.

7

Imprime semi-fino aquí. Consolas no tiene un glifo para ese personaje, por lo que todo lo que veo en la ventana de la consola es un glifo de reemplazo. Pero PowerShell acepta e imprime muy bien, como puede ver al copiar y pegar.

Ahora, si ha configurado la ventana de la consola como fuentes ráster, entonces la historia es un poco diferente, pero por suerte, PowerShell tiene valores por defecto.

1

Necesitas

  1. instalar un monospace font en su sistema, que contiene el glifo (posiblemente utilizar Mapa de caracteres para encontrar uno adecuado, etc.) y luego
  2. establecerlo como una fuente de la consola, como se describe aquí: http://www.watchingthenet.com/how-to-add-and-change-fonts-in-windows-command-prompt.html
+0

El mapa de caracteres no ayudará a encontrar una fuente para instalar en un sistema, ya que solo muestra las fuentes en su sistema. babelmap escaneará todas las fuentes en su sistema pero solo las fuentes en su sistema ... Si una fuente ya está en su sistema, entonces bien ... Pero no creo que una tenga ese glifo. Hace mucho tiempo investigué qué tipos de letra podía instalar en cmd prompt, encontré 3 ... uno era Deja Vu Sans Mono, y eso tiene su personaje. Ver mi respuesta – barlop

2

Deja Vu Sans Mono trabaja en cmd y tiene ese carácter, y por lo que funciona en PowerShell también.

Enter image description here

Enter image description here

Por cierto, yo también sugieren la instalación de Droid Sans Mono y Courier New, al símbolo del sistema. Luego estarán disponibles en PowerShell también. No hay muchas fuentes monoespaciadas que cmd admita. Pero esos son tres, Deja Sans Mono, Droid Sans Mono y Courier New.

Cuestiones relacionadas