Salida de archivo UTF-16 en cmd.exe

Salida de archivo UTF-16 en cmd.exe
chcp 10000
echo hell☺ w☻rld♥! >> "UTF-16 file☺☻♥♦♣♠"

Bien, crea el archivo correcto, pero en el contenido hay signos de interrogación en lugar de caracteres Unicode. ¿Como arreglarlo?

Respuesta1

Su código no es correcto, ya que 10000 no es una página de códigos Unicode. VerIdentificadores de página de códigos.

10000   macintosh   MAC Roman; Western European (Mac)
...
1200    utf-16      Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
1201    unicodeFFFE Unicode UTF-16, big endian byte order; available only to managed applications
...
12000   utf-32      Unicode UTF-32, little endian byte order; available only to managed applications
12001   utf-32BE    Unicode UTF-32, big endian byte order; available only to managed applications
...
65000   utf-7       Unicode (UTF-7)
65001   utf-8       Unicode (UTF-8)

No estoy seguro de por qué, pero el símbolo del sistema parece interpretarlos como caracteres de control cuando se pegan, específicamente SOH (Inicio del encabezado, 01), STX (Inicio del texto, 02) y ETX (Fin del texto, 03).

En el lado positivo, PowerShell parece manejar esto correctamente. Notepad++ abrió el archivo de texto resultante como "UCS-2 Little Endian" automáticamente y muestra los caracteres correctos.


Ok, descubrí por qué UTF-8 no funcionaba para mí. La fuente debe configurarse en Lucida Console, ya que las fuentes ráster predeterminadas no son compatibles con Unicode.

Respuesta2

Ambos 65001.txty 1200.txtcontienen la misma cadena: абв™pero en codificación diferente. El comando:

chcp 65001 & type 65001.txt 

cambia con éxito la página de códigos, pero muestra la basura.

El comando:

type 1200.txt

muestra los caracteres correctos, pero el comando

for /f %A in ('type 1200.txt') do echo %A

muestra абвT.

Entonces, cmd.exe ES capaz de trabajar con la página de códigos 1200 (con algunos límites), mientras que no puedo obtener resultados satisfactorios con la página de códigos 65001.

información relacionada