Caracteres UTF8 no terminal do Windows 10 bash

36

Eu instalei o novo shell bash no Windows 10. Estou usando-o junto com o ZSH. No entanto, nenhum dos caracteres utf8 funciona, eles aparecem como blocos quadrados. Como habilito a codificação de caracteres utf8 no shell como padrão? Isso é possível?

Ortix92
fonte
5
Se cada caractere aparecer como um bloco quadrado, o UTF-8 já funcionará; é a fonte que não possui suporte Unicode.
grawity
usar chcp 65001a mudança de página de código para UTF-8 e altere a fonte para Consolas
phuclv
Mudei para a SimSun-Ext Bfonte e todos os caracteres estão sendo exibidos corretamente.
Ryan Foley
5
@rawrawity Eu estava usando uubntu mono e agora mudei para consolas. Em vez de uma caixa quadrada vazia, recebo uma caixa quadrada com um ponto de interrogação dentro. Também tentei a sugestão chcp, mas ela já está definida para a codificação UTF-8 quando verifiquei as propriedades.
Ortix92
2
Gostaria de salientar que este problema ainda não está resolvido e que eu ainda não pode exibir caracteres utf8 unicode corretamente usando ZSH
Ortix92

Respostas:

12

Clique com o botão direito do mouse na barra de título, na parte superior da janela do bash, escolha as propriedades da entrada. Na janela de abertura, há uma guia na qual você pode alterar a fonte. Mudei a fonte para "Source Code Pro" e tamanho 14.

Parece bom e todos os caracteres utf-8 estão funcionando.

Doctorj
fonte
Essa é a verdadeira resposta. Você pode escolher a fonte que desejar, como suporte ao UTF8. Instalei o Menlo e esqueci de alterá-lo nas opções do bash, sinceramente nem pensei nisso.
StalkAlex
Observe que eu tentei todas as opções padrão no Windows (incluindo o Source Code Pro) e o caractere de marca de seleção (✔) só funcionou para mim com a fonte "DejaVu Sans Mono" sugerida por @ user3599934!
Sevron
10

Para adicionar à resposta do Doctorj, existem algumas fontes instaladas por padrão que você pode usar (no shell bash do Windows 10).

Idiomas testados: búlgaro, ucraniano, chinês simplificado, chinês tradicional, dinamarquês, francês, alemão, italiano, japonês, cazaque, coreano, macedônio, mongol, norueguês, polonês, português, russo, sérvio, espanhol e sueco.

As seguintes fontes padrão exibem todos os caracteres observados:

  • MS Gothic
  • NSimSun
    • Não parece exibir todo o cazaque.
  • SimSun-ExtB (fonte raster) - Minha recomendação

MS Gothic e NSimSun

  • Espaços fora dos idiomas não latinos e não CJK (chinês, japonês, coreano) (macedônio, cazaque, búlgaro).
  • Possui um deslocamento vertical ímpar em caracteres latinos acentuados (á, é).
  • Não exibiu pelo menos um caractere macedônio.

SumSun-ExtB (fonte raster):

  • Há uma mensagem de aviso informando que as fontes Raster podem não ser exibidas corretamente.
  • A maioria dos caracteres é exibida sombria (pode ser um problema com pouco brilho da tela).
  • Caracteres não ASCII são brilhantes, em comparação com caracteres ASCII (solução possível, use a opção negrito).
  • Os caracteres de todos os idiomas estão próximos (é mais fácil ver o espaçamento entre as palavras).
  • Parece mais confiável para idiomas não latinos e não CJK.

Com qualquer uma dessas fontes, no prompt de comando e no PowerShell, coisas estranhas acontecem quando você clica em caracteres não ASCII, embora volte ao normal quando você destaca o texto.

Para instalar uma fonte: Observe que você precisa alterar a fonte do shell do Windows que está usando, como o prompt de comando ou o PowerShell, e não o caminho do Linux no bash. Este link descreve quais fontes podem ser usadas no Prompt de Comando (fontes monoespaçadas e como instalar e selecionar uma fonte para o Prompt de Comando): Adicione fontes ao Prompt de Comando

  • Abra o Editor do Registro (execute "regedit")
  • Localize a pasta HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Console \ TrueTypeFont
  • Clique com o botão direito (ou Editar) -> Novo -> Valor da String
  • Nomeie a fonte com mais um 0 que o último (como "000").
  • Clique com o botão direito do mouse na entrada e selecione "Modificar ..."
  • Digite o nome da fonte ou do arquivo OTF (sem .otf).

Para obter informações sobre a instalação de fontes pela linha de comando no Windows, consulte esta pergunta e respostas.

  • Tentei instalar o "Source Code Pro", mas ele não apareceu nas fontes para mim.
  • Instalei o DejaVu Sans Mono e ele funciona na maioria dos idiomas, mas não funciona no CJK.
  • Instalei a fonte monoespaçada Noto do Google e funcionou, mas não para o CJK. Além disso, eles dizem especificamente que não têm suporte monospacial para o CJK.
  • Instalei o Inconsolata do Google e não valeu a pena tentar.
  • Instalei o GNU FreeFont (FreeMono) e funcionou, mas não para o CJK.
  • Desisti e voltei ao SimSun-ExtB.

(Nota: ainda não tenho reputação suficiente para postar os links).

Joshua Mathias
fonte
6

Você pode experimentar o DejaVu Sans Mono - funciona para mim.

user3599934
fonte
11
Embora essa possa ser a solução para o problema do OP, é mais uma dica do que uma resposta de alta qualidade. Pode ser aprimorado dando instruções sobre: ​​1) como alterar a fonte do terminal Windows 10 Bash; 2) como instalar a fonte mencionada (a menos que esteja em todos os Windows 10 por padrão - estou no Linux, não sei).
Kamil Maciorowski
1
Eu usei o Ubuntu Mono antes e tive o problema com ele. O DejaVu Sans Mono resolveu o problema.
smonff
0

Isso é realmente mais um comentário do que uma resposta, mas como o SE não me permite comentar ...

Você não forneceu informações suficientes. O Unicode fornece mais de um milhão de caracteres possíveis, dos quais mais de 100.000 foram definidos. (Os restantes são para quando entramos em contato com extraterrestres, ou mais provavelmente com os sistemas de escrita dos terráqueos que ainda não foram codificados.) Estes são divididos em cerca de 150 scripts: latim, cirílico, árabe, chinês ... Nenhuma fonte está funcionando para fornecer glifos (imagens de caracteres) para todos esses caracteres. (Há um ou dois que fornecem uma caixa com o ponto de código dentro, mas não é isso que você deseja.)

Como o grawity disse há mais de dois anos, se você está recebendo uma caixa onde espera um único caractere, seu aplicativo já está exibindo Unicode (presumivelmente a codificação UTF-8 do Unicode). O que falta é uma fonte que forneça glifos para quaisquer scripts que você deseja exibir. Se você está exibindo russo, deseja uma fonte com caracteres cirílicos; se você quiser exibir chinês, precisará de uma fonte com esses caracteres. (A maioria dessas fontes também exibirá caracteres latinos - do tipo que usamos para o inglês - mas não necessariamente bonitos.)

Então, minha pergunta para você é: qual script você está tentando exibir? Até que saibamos disso, todas as respostas serão suposições.

BTW, existem alguns scripts bastante complicados e apenas alguns programas os exibirão corretamente, mesmo se você tiver a fonte correta. Entre eles estão birmaneses, alguns scripts índicos (Devanagari, por exemplo) e árabe (que é escrito da direita para a esquerda e tem caracteres que devem ser exibidos de maneira diferente dependendo dos caracteres adjacentes).

Mike Maxwell
fonte