Como obtenho um caractere acentuado? [RESOLVIDO]

1. Como obtenho um caractere acentuado? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/05/2018 - 19:47h

Como obtenho armazeno caracteres acentuados em UTF-8? Quero corrigir esse código, testei no terminal que interpreta UTF-8.

#include <stdio.h>
int main()
{
printf("Digite um caractere: ");
char caractere1; scanf("%c", &caractere1);
printf("O caractere digitado foi: %c\n",caractere1);
}


Sei que as distribuições Linux usam a codificação UTF-8 por padrão.
Quero um código que obtenha caracteres e exiba na tela, quero que esse código funcione de preferencia tanto com UTF-8 quanto com ISO 8859-1.

Quando executo usando a codificação ISO 8859-1 devolve os caracteres acentuados normalmente.

Digite um caractere: á<enter>
O caractere digitado foi: á


Quando executo usando a codificação UTF-8 devolve os caracteres acentuados com "?"

Digite um caractere: á<enter>
O caractere digitado foi: ?



  


2. Re: Como obtenho um caractere acentuado?

Fernando
phoemur

(usa Debian)

Enviado em 24/05/2018 - 20:35h

Essa mesma pergunta já foi respondida umas 4 vezes nos últimos meses...
Um caractere UTF-8 pode necessitar de 1 a 4 bytes para ser representado...
Se você utilizar um char comum (1 byte) só vai dar pra representar corretamente basicamente os caracteres da tabela ASCII, ou seja, o subconjunto de UTF-8 representável por apenas 1 byte.

Existem algumas abordagens.

Aqui usando wide chars:

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main(void)
{
setlocale(LC_ALL,"");

wprintf(L"Digite um caractere: ");
wchar_t caractere1;
wscanf(L"%lc", &caractere1);
wprintf(L"O caractere digitado foi: %lc\n",caractere1);

return 0;
}



3. #include <stdio.h> é desnesesario.

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/05/2018 - 13:12h

#include <stdio.h> é desnesesario.
Compilei esses códigos no gcc e funcionou:
#include <wchar.h>
#include <locale.h>

int main()
{
setlocale(LC_ALL,"");

wprintf(L"Digite um caractere: ");
wchar_t caractere1;
wscanf(L"%lc", &caractere1);
wprintf(L"O caractere digitado foi: %lc\n",caractere1);
}


#include <wchar.h>
#include <locale.h>

int main()
{
setlocale(LC_ALL,"");

wprintf(L"Digite um caractere: ");
wchar_t caractere1;
wscanf(L"%lc", &caractere1);
wprintf(L"O caractere digitado foi: %lc\n",caractere1);
return 0;
}



4. acento

Luis Antonio da Cruz Gomes
v1lao

(usa XUbuntu)

Enviado em 26/05/2018 - 15:31h

Man, eu te indico a biblioteca LOCALE






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts