Mesmo no Windows 7, você pode fazer um "dir" e ser capaz de ver nomes de arquivos com caracteres unicode?

5

Isso está um pouco relacionado à questão

No Windows 7, o dir ou a árvore não podem mostrar caracteres unicode, mesmo iniciando o cmd com cmd / U

Mesmo no Windows 7, descobri que a única maneira de obter o unicode para entrar em um arquivo é

> cmd /U
> dir /B > files.txt

o arquivo estará em "Unicode" quando eu abrir no Bloco de Notas e tentar "Salvar como", e se eu dir /B > files.htmlabrir o arquivo HTML no firefox, ele poderá ser exibido usando a Codificação de UTF-16 (ou UTF-16 LE).

mas, se eu quiser vê-lo na tela em vez de enviá-lo para um arquivo, ainda é impossível. Existe uma maneira de fazer isso acontecer? Possivelmente, de alguma forma, dizendo ao cmd para não mostrar caracteres não imprimíveis como "?"

Atualização: tentei o cmd.exe, a festa do cygwin no Windows e o PowerShell. Eles são os mesmos. Exceto se eu alterar "Propriedades -> Fonte" para Consolas ou Lucida Console, houver alguma melhoria - agora não é ponto de interrogação, mas é borda quadrada ou quadrado com um ponto de interrogação.

Os computadores Mac mais caros com o Mac OS X podem fazê-lo. O Ubuntu grátis também pode fazer isso.

太極 者 無極 而
fonte

Respostas:

5

Esta é uma pergunta muito antiga, mas todas as respostas dadas aqui estão erradas.

Você nunca verá a saída Unicode na linha de comando do Windows (CMD.exe). O motivo é que o CMD não pode exibir Unicode. No entanto, ele pode exibir DBCS (conjunto de caracteres de byte duplo).

Se você deseja ver a saída em japonês, por exemplo, é necessário alterar a localidade do sistema para japonês e reiniciar. Em seguida, você poderá ver caracteres DBCS japoneses (ou seja, Shift-JIS) na linha de comando. O Windows suporta páginas de códigos DBCS em japonês Shift-JIS, chinês simplificado, coreano e chinês tradicional "Big5".

Aliás, você pode canalizar UTF-16 (usado incorretamente de forma intercambiável com "Unicode" da Microsoft) para um arquivo, depois abrir esse arquivo, digamos, no Bloco de Notas e exibir os caracteres Unicode. Você também pode marcar e copiar o texto sem sentido do CMD.exe, colá-lo no bloco de notas e ver os caracteres Unicode. Em outras palavras, o CMD suporta Unicode, mas não exibe Unicode.

Você pode encontrar mais informações nesta postagem do blog .

Jeff
fonte
1

Com base no seu nome de usuário, suspeito que você trabalha principalmente com idiomas asiáticos.

As ferramentas do Windows operam normalmente no modo unicode (como você viu canalizando a saída dirpara um arquivo e abrindo esse arquivo com um editor):

  1. a ferramenta faz suas coisas
  2. gera caracteres unicode
  3. outro programa pega essa saída e precisa exibi-la.

Para exibir qualquer caractere na tela, o programa da etapa 3 deve procurar o glifo apropriado para a sequência de bytes especificada. exemplo:

  • 0x65 'a' mapeia para um glifo diferente em cada fonte (para que o 'a' pareça diferente de fonte para fonte)

  • 0x937 'Ω' (grego 'ômega') é mapeado para um glifo diferente em cada fonte também

esse mapeamento funciona apenas se a fonte tiver um glifo para a sequência de bytes fornecida. caso contrário, o resultado visual será diferente, às vezes você verá '?', às vezes diamantes etc.

Novamente: dirproduz referências bytese, que às vezes são puramente no intervalo ASCII, às vezes no intervalo unicode (dependendo dos nomes de arquivos encontrados). envia essas seqüências para outro programa que é responsável por renderizar as seqüências de bytes. para poder exibir essas seqüências, este programa precisa mapear a sequência para um glifo. para fazer isso, ele precisa procurar em uma fonte o glifo. se a fonte não possuir um glifo para a sequência especificada, o programa não poderá exibir a sequência de bytes produzida por, por exemplo dir.

então, a solução para o seu problema (vendo qualquer caractere unicode no 'console / terminal' do windows) é: use uma fonte para o programa que possua (quase) todos os glifos para (quase) qualquer sequência unicode específica nele.

akira
fonte
1
hm, mas o cmd, cygwin bash e PowerShell são todos limitados a 3 fontes: fontes raster, Lucida Console e consolas ... na verdade, o Windows geralmente volta a uma fonte unicode quando não pode exibir nada com a fonte atual. .. também, se eu redirecionar a saída, como dir > file.txtse ainda fosse um ponto de interrogação no arquivo, mesmo que seja "caixa quadrada" na tela.
太極者無極而生
@ Jian Lin: sim, mas isso é essencialmente SEU problema para fornecer uma fonte que contém esses glifos. e mesmo que o Windows volte para a fonte "some" que contém "alguns" glifos unicode nela ... isso não é suficiente para exibir alguns dos glifos asiáticos (você tem problemas com os glifos asiáticos, certo?).
akira
de acordo com alguns sites, "Ascender Uni Duo" parece ser a melhor fonte (mesmo para "fixa") ascendercorp.de/fonts/multilingual/ascender-uni, mas talvez você encontre algo melhor / mais barato pt.wikipedia.org/wiki/ Unicode_typefaces
akira
@akira existem muitas fontes no Windows 7 que podem exibir todo o conjunto de glifos Unicode. Mas (1) a janela Cmd não permite que você escolha nenhuma delas. (2) Quando o Windows ou o aplicativo retornam à fonte que pode exibir unicode, como Lucida Sans Unicode, ele pode exibir quase todos os caracteres chineses.
太極者無極而生
1
@akira: Boa resposta, eu apenas substituiria "sequências de bytes" por "sequências de 16 bits" ou "sequências de caracteres UTF-16", pois é isso que o Windows usa internamente.
Philipp
0

https://stackoverflow.com/questions/388490/unicode-characters-in-windows-command-line-how

Use chcp 65001para alterar a página de código para UTF8 e use o Lucida Console.

ta.speot.is
fonte
hm ... ainda não funcionará ... cmd / U, chcp 65001, dir e dir / B com a fonte já definida como Lucida Console, ainda a mesma.
太極者無極而生
1
Convém tentar adicionar mais fontes ao console: support.microsoft.com/kb/247815 e blogs.msdn.com/b/oldnewthing/archive/2007/05/16/2659903.aspx (este último para discussão sobre o problema).
ta.speot.is
que tudo depende das fontes que você está dando o programa para tornar o texto. leia o artigo de suporte, com boas informações.
Akira
1
@taspeotis: o console do Windows sempre usa Unicode internamente, independentemente da configuração da página de códigos (que é obsoleta de qualquer maneira e incluída apenas para compatibilidade com versões anteriores). É realmente apenas um problema de fonte.
Philipp
Pode ser usada qualquer fonte incluída no Win 7? tal como MingLiU, DFKai-SB
太極者無極而生
0

Não tem nada a ver com codificações, pois o console do Windows sempre usa Unicode internamente. Os caracteres simplesmente não estão disponíveis nas fontes usadas, projetadas para programação e idiomas europeus. Não tenho acesso ao Windows no momento, mas lembro que pude imprimir caracteres gregos depois de mudar para a fonte do Lucida Console. Usar uma fonte como DejaVu Sans Mono pode funcionar.

Philipp
fonte
eu criei um nome de arquivo russo e o cmd.exe exibiu os glifos corretamente depois de mudar para o lucida. para fontes asiáticas, acho que o OP precisa escolher uma fonte fixa completa "melhor" ou mais "unicode" (mesmo que ele não goste dessa resposta :)).
Akira
0

Ok, esta é uma solução usando o PowerShell:

1) Clique no Startbotão no Windows 7
2) Agora, na linha em branco, digite PowerShell
3) EscolhaPowerShell ISE <- observe que éISE

Agora, se você conseguir ls, poderá ver caracteres unicode ...

4) se você também usar chcp 65001, se o seu programa imprimir caracteres UTF-8, eles também serão bem exibidos.

Você também pode ls > list.txte, em seguida, type list.txto conteúdo também aparece em caracteres Unicode.

tree ainda não mostrará caracteres unicode.

Além disso, dentro do PowerShell ISE, cmd /U /C dir /Btambém não funcionará.

ls -R vai.

太極 者 無極 而
fonte
lsno Powershell é na verdade apenas um pseudônimo para "Get-ChildItem"
KdgDev
e depois? não me diga que você usa Get-ChildItemna linha de comando todos os dias em vez de ls. Por exemplo, geralmente bebemos água em vez de dióxido de hidrogênio.
precisa saber é o seguinte