Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Caracteres com formatação estranha

Olá, boa noite.

Estou seguindo as aulas do curso de C e é a primeira vez que utilizo o compilador gcc,o que eu preciso fazer pra corrigir esses caracteres no prompt de comando ?? Segue link a baixo com a imagem:

https://prnt.sc/pg6w1q

9 respostas

Oi Felipe, que editor você está usando? Já vi esse tipo de problema acontecer por causa do encoding do arquivo que o editor salva em alguma coisa diferente de UTF-8

Felipe, boa tarde!

Uma possível solução é usar o módulo locale.h e apartir daí definir o idioma da aplicação para português, veja um exemplo abaixo

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    int main(void)
    {
      setlocale(LC_ALL, "Portuguese"); //Define o idioma como português
      printf("Utilizando caracteres e acentuação da língua portuguesa!\n\n");

      system("pause");
      return 0;
    }

Espero ter ajudado e bons estudos!

Consegui corrigir o erro, eu estava utilizando o Visual Studio Code e precisei alterar o encoding pra Windows1252, usei também a biblioteca <locale.h>. Minha única dúvida agora, é a seguinte: Caso eu execute esse código em outro computador e o usuário tente compilar ele, pode ser que na máquina onde está sendo compilado volte a ocorrer os problemas nos caracteres especiais, né ?

Isso, como a solução foi trocar o encoding do arquivo direto no editor, o editor da máquina do usuário pode trocar o encoding gerando o mesmo problema novamente.

Se você usar UTF-8, também deveria funcionar, não?

Mesmo quando salvo o arquivo com o encoding UTF-8 os caracteres especiais continuam assim, vou enviar os prints do código que usei pra testar, de como aparece no compilador e o encoding no VS Code.

Código pra teste --> https://prnt.sc/pkrd09 - Não adianta colocar setlocale(LC_ALL, "Portuguese"), o resultado é o mesmo. Compilador --> https://prnt.sc/pkrdla Encoding --> https://prnt.sc/pkrdz3

Mas como disse anteriormente, se eu salvo como Windows1252 funciona e com a ISO88591 também.

Oi Felipe,

a questão do encoding vai te acompanhar pelo resto da vida do desenvolvedor :) .... enquanto tem entrada e saída de dados de processos diferentes, vc vai ver problemas com isso pois o encoding precisa bater para funcionar. Isso acontece, por exemplo, no banco de dados, navegador ou servidor pois todas tem I/O.

No prompt/terminal isso não é diferente. O problema me parece ser o encoding do prompt que não bate com o encoding dos caracteres do seu programa.

Existe um artigo clássico sobre tal do autor Joel Spolsky (bem conhecido, pelo menos na minha época):

https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/

Tem um resumo desse artigo no blog da Caelum, foca no Java mas mesmo assim vale a pena:

https://blog.caelum.com.br/entendendo-unicode-e-os-character-encodings/

O Spolsky criou o Stackoverflow e nesse site achei um artigo que entra na questão do prompt e linguagem C. Nesse artigo o autor vai alem do setLocale(..):

https://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using

Bom, não fui muito concreto mas espero ter ajudado de alguma forma.

abs, Nico

Nesse caso seria melhor eu utilizar os caracteres da tabela ASCII ao invés dos caracteres especiais nas strings ? Isso é algo errado de se fazer ? Sou bem iniciante, não sei se isso é considerado errad, hahaha.

solução!

Oi Felipe,

Se vc usa apenas os caracteres da tabela ASCII os seus problemas vão diminuir, pois a maioria de tabelas seguem o ASCII (os primeiros 126 chars batem com ASCII). Ou seja, mesmo com diferenças entre tabelas não dá para perceber o problema.

Em uma aplicação real isso não vai ser suficiente e vc precisa garantir que todos os processo envolvidos usam o mesmo encoding.

Tudo bem?

abs

Entendi! Vou ler todos os artigos que você me enviou, agradeço pela atenção!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software