cygwin exibe retângulos em vez de caracteres

2

Eu tenho um problema no cygwin,

Quando uso o utilitário make no cygwin, ele imprime retângulos em vez de texto. Além disso, quando o texto não é inglês, por exemplo, polonês ou russo, vejo retângulos em vez de caracteres. Mas quando eu imprimo esses símbolos eu os vejo. Eu estou usando mintty, também XTerm, mintty é um pouco melhor.

Saída de locale do Xterm:

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=

Mas a coisa é enquanto meu windows xp é a versão em inglês, eu não estou nos EUA e tenho russo configurações de data e hora, talvez seja o problema?

Eu quero ver corretamente textos em diferentes idiomas, existe uma maneira?

Também mintty e xterm se comportam um pouco diferente. Eu tenho um arquivo de texto no idioma polonês e cat no mintty não dá nenhum retângulo para esse texto, enquanto cat no xterm me dá retângulos para alguns caracteres.

A saída para o make é assim no mintty:

$ make
make: ▒▒▒▒ 'default' ▒▒ ▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒.

e assim:

$ make
make: �� 'default' � ���� ����� ���.

no xterm.

Eu encontrei uma maneira de corrigi-lo para linguagens de sertain: link quando eu definir opções para mintty como disse lá e especificar o conjunto de caracteres ISO-8859-2, eu posso ver o texto polonês bem. Só que eu não entendi, salvei o texto no formato utf-8, por que preciso definir o charset, como se meu texto estivesse em ANSI.

E só consigo ver os resultados (o que é em russo, não sei porquê) quando defino o charset para CP1251.

    
por dhblah 11.09.2013 / 19:41

2 respostas

2

Nota: pedi ao OP para atualizar sua pergunta com saída para locale

Parece que você tem um problema de localidade, é possível ver quais são suas configurações de localidade atuais com locale . Você provavelmente tem uma configuração de LC_* que está causando a saída de make em um formato que seu terminal não está reconhecendo. Se você tiver escolhido um conjunto de caracteres UTF8 e, em seguida, tiver um terminal que não esteja configurado para analisar cadeias UTF8 ou suportá-las, verá isso. Também nos mesmos termos, se você tiver uma localidade não-utf-8 e seu terminal estiver configurado para exibir utf-8, você também verá problemas semelhantes. Minitty suporta-os:

$ perl -le 'binmode(STDOUT, ":utf8"); print "\x{0e44}\x{0e45}\x{0e46}";'
ไๅๆ

Teste LC_ALL=C make ou export LC_ALL=C && make e veja se a saída do bloco desaparece.

Para responder à sua pergunta sobre a diferença em utf8 e ANSI, utf8 tem um conjunto de caracteres MUITO maior. Para resolver isso, o utf8 usa 2 bits para descrever seqüências de caracteres estendidos, onde conjuntos de caracteres como ISO-8859-2 usam apenas 1. No entanto, a menos que truques como o BOM são colocados no arquivo (que nem sempre é suportado) os programas que você usa não tem idéia das diferenças e, portanto, dependem das configurações definidas em locale sobre como interpretar essas sequências. Para complicar estas questões, nem todas as aplicações suportam utf8. Mais detalhes sobre as especificidades da codificação, unicode e utf8 podem ser encontrados em Wikipedia . Se você precisar codificar seu texto em russo em unicode, as sequências unicode podem ser encontradas em Wikipedia também.

Se você usar caracteres estendidos em seu Makefile, certifique-se de que eles estejam em conformidade com a codificação na qual você pretende executá-los.

    
por 11.09.2013 / 19:50
1

O que é o mintty configurado para usar na fonte e na localidade? Você pode encontrar as configurações clicando no canto superior esquerdo da janela mintty, selecione "Opções ..." e depois clique em "texto".

O meu é definido como Font: Consolas, 11 pontos. Local: en_US, conjunto de caracteres: UTF-8.

Tente primeiro e, em seguida, tente definir seu local para russo.

    
por 11.09.2013 / 22:25

Tags