Ir ao conteúdo
  • Cadastre-se
Knuclesman

C++ entendendo "ã" como ã, como converter ou trabalhar com isso?

Recommended Posts

Estou trabalhando em um projeto onde possuo uma caixa de mensagem e ao clicar em enviar texto a string pega caracteres como "ã" e "á" como "A£" e "Â|" e coisas assim.
Acredito que seja problema de utf8 e latin algo do gênero mas eu não consigo converter nem trabalhar e ja pesquisei bastante.
 

Alguém conseguiria me disponibilizar um exemplo, classe ou método que eu pudesse utilizar para resolver este meu problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode trabalhar com valores diretamente da tabela ASCII, por exemplo:

std::cout << char(131) << std::endl;

Mas você também pode utilizar a biblioteca locale.

#include <iostream>#include <locale.h>int main(void){    setlocale(LC_ALL, "Portuguese");    std::cout << "ÂÊÇÉÁ" << std::endl;}

Isto para representação, claro.

 

 

Quanto a entrada de caracteres especiais, este código me funciona corretamente.

#include <iostream>#include <locale.h>int main (void){    setlocale(LC_ALL, "Portuguese");    char letra;    std::cout <<"Digite um caracter: ";    std::cin >> letra;    std::cout <<"\nVocê digitou: " << letra;    return 0;}

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tenho uma lista de strings do tipo "aAãÃáàÀÁ" e quando eu digito ã eu preciso saber se esta string contem a letra q eu quero. O metodo ja esta funcionando se eu não usar acento e eu n posso mudar o setLocale desse projeto pois é um projeto enorme e eu só preciso fazer isso. Alguma ideia de como faze essa checagem? Preciso de algum jeito fazer "A£" bater com "ã".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tenho uma lista de strings do tipo "aAãÃáàÀÁ" e quando eu digito ã eu preciso saber se esta string contem a letra q eu quero. O metodo ja esta funcionando se eu não usar acento e eu n posso mudar o setLocale desse projeto pois é um projeto enorme e eu só preciso fazer isso. Alguma ideia de como faze essa checagem? Preciso de algum jeito fazer "A£" bater com "ã".

 

Nesse caso você pode trabalhar com valores da tabela ASCII, como citado.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não existe alguma classe ou methodo existente do tipo wstring str = msg.ConvertToUtf8(something something);
Eu pesquisei sobre como trabalhar com os valores da tabela e n achei nada sobre latin1 com 2 characters tendo sinergia com os ã.

 

Ajuda pls ><

Compartilhar este post


Link para o post
Compartilhar em outros sites
int main (void){    unsigned char letra;    cout <<"Digite um caracter: ";    cin >> letra;    cout <<"\nValor na tabela ASCII: " << int(letra);    cout <<"\nCaractere correspondente: " << char(letra);    return 0;}

Quando digo trabalhar com valores diretamente da tabela ASCII me refiro a isto  :) .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compreendo. Mas alguns dos "ã" ou "á" digitados viram 2 caracteres por exemplo, como eu faria para trabalhar com isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compreendo. Mas alguns dos "ã" ou "á" digitados viram 2 caracteres por exemplo, como eu faria para trabalhar com isso?

O problema é a codificação do console, tente executar o código que mandei e entendera do que se trata. Aliás, qual seu compilador/IDE?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou usando Visual Estudio com o Marmalade e a Oxygine não sei o compilador mas cout e printf n funcionam aqui. Enfim eu tentei fazer uma classe minha para converter e coloquei todos os valores q eu encontrei de acento da letra "a" tanto maiusculo como minusculo e salvei em um array:  

string arr[] = { "a","A","á","@","à ","â","ã","ÃÃ","€Ã","ƒÃ"}; 

Mas quando eu checo se a palavra viãdo possui a 7a string do array ele n acha... Mas se a string retornada é viádo ele consege achar pelo terceiro, ou seja, somente alguns caracteres estão funcionando.

 

if(str.find(vMaster[b][j]) != std::string::npos){   int f = str.find(vMaster[b][j]);   str.replace(f,2,vMaster[b][0]);   break;}

Onde b é o numero de arrays que meu vector de arrays possui e j a posição da string do array ( o b é sempre 0 pois só estou testando com um vetor ).
Após checar a palavra viãdo com "ã" ele sempre retorna 0 e não -1, alias com qualquer letra ( que nao existe na lista de array ) ele acaba retornando 0 e não menos um ou seja sempre entra naquele if e da erro... <O>
E mesmo que retornasse -1 somente algumas das strings sao encontradas na palavra digitada...

Quando eu digito banãnã na chatbox aqui estou recebendo banãnã e preciso fazer isso ser convertido para banãnã novamente então tentei converter na mão mas ele n encontra Ã£ na palavra banãnã...

Por favor alguma dica?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×