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

Código compilado não está em UTF8 no windowns

Após a compilação do primeiro programa demonstrado em aula utilizando o GCC, os caracteres especiais ficam todos desconfigurados, existe alguma configuração na prompt do windows ou alguma biblioteca do C que deva ser importada?

11 respostas

Oi Thiago, que editor você usou para editar seu código? Este problema em geral surge porque seu arquivo não está salvo com encoding utf-8 antes da compilação.

Veja se consegue alterar a codificação do próprio arquivo de código.

Estou utilizando o Sublime Text 3, eu preciso configurar algo para que funcione?

Nao lembro de cabeça onde fica a configuração pra salvar com encoding padrão, mas acho que o Sublime vem configurado pra usar UTF 8.

Pode tentar clicar em arquivo -> salvar com encoding -> UTF-8. Aí você apaga e reescreve alguns caracteres especiais, recompila e confere as mudanças.

Se isso não funcionar terei que fazer alguns testes à parte aqui.

Bom, fiz o que você disse mas o programa ainda continua com problemas nos caracteres especiais.

Thiago, um colega me apontou que o problema pode ser o uso do Windows em conjunto com o encoding em UTF-8. Dei uma pesquisada e encontrei alguns relatos de que o console do Windows realmente tem suporte bem limitado a este encoding.

Que versão do Windows vc está usando? Tem o PowerShell disponível? Tente compilar e rodar seu programa usando o PowerShell ao invés do prompt pra ver se tem alguma diferença.

Se não, posso indicar alguns posts do StackOverflow (ou traduzi-los pra cá) que dão soluções paliativas, mas não adequadas.

Se nada funcionar, talvez o mais adequado seja você utilizar UTF-16 que é melhor suportado no console do Windows.

Já vou indicar aqui as postagens que encontrei sobre o assunto que mais me esclareceram:

Estou utilizando o Windows 10, compilei e executei meu programa através do powershell, porém não tive sucesso.

solução!

Talvez então só possa recorrer às soluções menos ortodoxas que os posts do StackOverflow indicam.

Não é adequado pois se configurado como padrão no seu console pode causar o mesmo bug no restante do sistema, já que este é baseado em outro encoding, mas pelos relatos funciona. Se utilizado uma vez por sessão, o bug só se extende durante a sessão.

Execute o comando chcp 65001 antes de rodar seu programa. Mude também a fonte do seu console para Consolas ou para Lucida Console.

utilizando o comando chcp 65001 os caracteres especiais foram apresentados corretamente. Seria necessário eu implementar algum componente em meu código C para que ele sempre funcione com esse comando?

Não sei de alguma função em C que faça isso. Só encontrei em C++. Depois de uma busca relativamente extensa, começo a achar que não tem uma solução ideal. =(

Bom, ao menos o problema foi contornado (não resolvido)! Marque a resposta que te ajudou como solução e ajude o próximo aluno que tenha a mesma dúvida =)

Muito Obrigado pela ajuda e pelo tempo de dicado a resolver esse problema por hora :D