Ir ao conteúdo

Posts recomendados

Postado

Bem galera, quando eu usava o Dev para programar, a acentuação das palavras apareciam normalmente, porém, ao migrar para o sublime text 3, isso não acontece mais, tenho que compilar e executar os programas pelo cmd, e ele não acentua as palavras mesmo com o setlocale, eu já tentei resolver esse problema, mas nada que eu fiz resolveu esse problema, alguém tem ideia do que pode ser?

Anotação 2020-07-23 110109.jpg

Postado
51 minutos atrás, Matheus Eduardo Vieira disse:

Dev para programar, a acentuação das palavras apareciam normalmente, porém, ao migrar para o sublime text 3, isso não acontece mais, tenho que compilar e executar os programas pelo cmd, e ele não acentua as palavras mesmo com o setlocale, eu já tentei resolver esse problema, mas nada que eu fiz resolveu esse problema, alguém tem ideia do que pode ser?

 

Dev-C++ é um IDE, Sublime text um editor de texto. Nenhum deles tem efeito sobre acentos. Provavelmente você nunca tinha rodado seus programas do jeito que era pra ser normal: como um programa e não como um arquivo dentro do IDE.

 

A vida de um programa era pra começar quando ele fica pronto. Mas para muita gente, estudantes e pessoal que programa por hobby ou curiosidade, acontece o contrário: a vida do programa termina quando ele fica pronto e depois ele nunca mais é executado :) 

 

O programa pronto era pra ser entregue, vendido, distribuído. E claro testado em outros ambientes que não o computador em que foi escrito, dentro da janelinha do IDE em que ele foi escrito. Dentro do IDE o código em geral é bem diferente do que sai para uso "oficial", o tal Release Build. E é possível que seu programa que roda certinho no IDE não rode mais em Release mode :( até.

 

Para que os acentos sejam exibidos numa aplicação de console você deve confirmar a página de saída, e a fonte da console além da configuração de locale. 

 

Essa rotina abaixo lê esses valores. Pode te servir como exemplo.
 

_cs_status*    guarda(_cs_status* antes)
{
	antes->cp_original = GetConsoleCP();
	antes->ocp_original = GetConsoleOutputCP();
	strcpy(antes->local_original, setlocale(LC_ALL, NULL));
	HANDLE  h = GetStdHandle(STD_OUTPUT_HANDLE);
	char buffer[80];
	char* pBuffer = buffer;
	int res = 0;
	res = GetCurrentConsoleFont(h, 0, &(antes->font_info));
	// pois e: mas qual a fonte? Tem que ver na tabela
	// precisa da versao ex da rotina e eu nao sabia
	antes->font_infoEx.cbSize = sizeof(CONSOLE_FONT_INFOEX);
	res = GetCurrentConsoleFontEx(h, 0, &(antes->font_infoEx));
	// A fonte em uso fica aqui no registro
	//    Computador\HKEY_LOCAL_MACHINE\SOFTWARE\
    //    Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
	//
	GetConsoleMode(h, &antes->mode_original);
	// agora falta SCREEN BUFFER
	antes->infoEx.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);
	GetConsoleScreenBufferInfoEx(h, &antes->infoEx);
	return antes;
};  // guarda()

No terminal pode rodar CHCP e ver a página que está em uso no momento, e depois ver na WikiPedia por exemplo se tem as letras que você quer... 1252 é uma escolha comum no Brasil. A página 65001 que usa Unicode está se tornando a opção comum.
 

image.png.40c3289b6c537887976ab118b736173f.png

 

image.png.d6bbdcecf697dde6a98caaff9bb004d5.png

 

E a fonte? 

 

Se ela não tiver as letras de nada adianta...
 

image.png.1cf9814fb0c7c439c6ee21d94e3940d9.png

 

Nas propriedades da janela você vê a fonte que está em uso. Aí pode usar o mapa de caracteres do Windows e ver se tem as letras que quer mostrar... 

 

Use Windows 10. E o terminal do windows para rodar seus programas.

 

image.png.3ba5e29784bf83b156d7d41472e30f16.png

 

Veja que essa fonte tem até os caracteres em braille, o que faz pouco sentido sem uma certa reflexão, já que eles são lidos por relevo...  Mas os programas que leem texto podem imprimir texto, por exemplo.

 

Veja quantos símbolos tem só nesse pedaço... Mostrar isso na tela é outro pesadelo e gravar em arquivo outro maior. O caminho mais simples é esquecer isso e usar o navegador.

 

O mais seguro é usar o Terminal do Windows para rodar seus programas. É muito mais rápido --- usa aceleração gráfica por hardware, como os games --- e tem todos símbolos, usando Unicode --- hoje mais de 1.1 milhão de símbolos.

 

Usar um Editor e rodar seus programas assim vai te mostrar muitas coisas que ficavam ocultas nos IDE.

 

Postado
Em 23/07/2020 às 11:07, Matheus Eduardo Vieira disse:

Bem galera, quando eu usava o Dev para programar, a acentuação das palavras apareciam normalmente, porém, ao migrar para o sublime text 3, isso não acontece mais.

 

Desentendimento de Codificação

 

O GCC é um compilador inteligente, identifica a codificação do arquivo fonte (.c; .txt) e por padrão codifica igualmente a saída do programa. Daí suponho que os arquivos gerados no 'Dev' tem a mesma codificação atual que o cmd.exe e o sublime text 3 parece que ainda não.

 

Experimentei inconsistência semelhante com notepad++ que suporta gravar arquivos fontes em várias codificações incluindo a 850 que é a mesma usada no nosso Prompt de Comando.

 

Faz alguns anos que notepad++ suporta gravar em codificação OEM 850, verifique se também o sublime text permite essas mudanças na configuração.

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!