saída de arquivo UTF-16 em cmd.exe

1
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 consertar isso?

    
por 0x6B6F77616C74 26.05.2012 / 13:07

2 respostas

1

Seu código não está correto, pois 10000 não é uma página de código Unicode. Consulte Identificadores de páginas 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)

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

No 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 funcionava para mim. A fonte deve ser definida como Lucida Console, uma vez que as fontes de varredura padrão não têm suporte a Unicode.

    
por 26.05.2012 / 13:37
0

Tanto 65001.txt como 1200.txt contêm a mesma sequência: абв™ , mas em codificação diferente. O comando:

chcp 65001 & type 65001.txt 

altera com êxito a página de códigos, 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ódigos 1200 (com alguns limites), embora eu não consiga obter nenhum resultado satisfatório com a página de códigos 65001.

    
por 12.11.2016 / 17:41