Saída do arquivo UTF-16 em cmd.exe

Saída do arquivo UTF-16 em cmd.exe
chcp 10000
echo hell☺ w☻rld♥! >> "UTF-16 file☺☻♥♦♣♠"

OK, ele cria o arquivo correto, mas no conteúdo há pontos de interrogação em vez de caracteres Unicode. Como corrigi-lo?

Responder1

Seu código não está correto, pois 10000 não é uma página de código Unicode. VerIdentificadores de página de código.

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)

Não sei por que, mas o prompt de comando parece interpretá-los como caracteres de controle quando colados, especificamente SOH (Início do Título, 01), STX (Início do Texto, 02) e ETX (Fim do Texto, 03).

Do lado positivo, o PowerShell parece lidar com isso corretamente. O Notepad++ abriu o arquivo de texto resultante como "UCS-2 Little Endian" automaticamente e exibe os caracteres corretos.


Ok, descobri por que o UTF-8 não estava funcionando para mim. A fonte deve ser definida como Lucida Console, já que as fontes raster padrão não têm suporte a Unicode.

Responder2

Ambos 65001.txte 1200.txtcontêm a mesma string: абв™mas em codificação diferente. O comando:

chcp 65001 & type 65001.txt 

altera com sucesso a página de código, mas exibe o lixo.

O comando:

type 1200.txt

exibe os caracteres corretos, mas o comando

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

exibe абвT.

Portanto, cmd.exe É capaz de trabalhar com a página de código 1200 (com alguns limites), enquanto não consigo obter resultados satisfatórios com a página de código 65001.

informação relacionada