Jump to content
isker

passar de caracteres especiais para normais

Recommended Posts

isker

olá.

quando leio palavras dum ficheiro, preciso de identificar os caracteres com acento e o 'ç' e transforma-los nos caracteres normais.

por exemplo: maçã -> maca

tentei ir pelo código ascii, mas não funciona porque o programa considera que todos dos caracteres especiais correspondem ao numero -61. alguém pode dar uma ajuda?

Share this post


Link to post
Share on other sites
iniciante

eu fiz isso para um trabalho..pode n ser a melhor maneira mas tinha 2 arrays.. um array com todas as letras ascii e outro array com a respectiva conversão. e assim sempre que lia um carácter ia ao 1º array e via qual era a posição desse carácter e dps ia ao segundo buscar a sua respectiva conversão e assim ia construindo as palavras com os caracteres todos normais.


RC

Share this post


Link to post
Share on other sites
KTachyon

Basicamente, são caractéres não ASCII. O que acontece é que são representados pelo teu sistema como caracteres de 2 bytes, ficando:

-61 -89 (ç)

-61 -93 (ã)

Ao ir buscar o char, sendo apenas 1 byte, fica apenas com o -61. Convertendo para unsigned:

195 167 (ç)

195 163 (ã)

Em hexadecimal:

c3 a7 (ç)

c3 a3 (ã)

Se espreitares esses valores na tabela de UTF-8:

http://www.utf8-chartable.de/

Tens algumas hipóteses, como utilizar wchar_t para wide chars, mas outra hipótese é, quando apanhas um char maior que 127 (ou negativo, que é a mesma coisa), tens que apanhar o char seguinte e a esse é que poderás aplicar uma conversão.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
isker

já consegui fazer a função.

não estava a conseguir porque não sabia que os caracteres especiais ocupavam mais espaço.

obrigado pela ajuda

Share this post


Link to post
Share on other sites
kaijy

já consegui fazer a função.

não estava a conseguir porque não sabia que os caracteres especiais ocupavam mais espaço.

obrigado pela ajuda

Olá.

Dadas as vossas indicações, não sei porquê, continuo com o problema.

Ao mudar o caractér, do tipo p[ i ]= 'A' o programa da-me imediatamente segfault. Depois desta instruçao iria deslocar todos os carateres um caractere para trás para compensar o double char criado pelo caracter especial.

Podem me ajudar? Thanks.

Share this post


Link to post
Share on other sites
isker

cada carácter especial ocupa 2 "espaços": o 1º não interessa(é "lixo") e o 2º indica qual é a letra.

o que eu fiz foi percorrer a palavra e alterar APENAS o 2º espaço de cada carácter especial. por exemplo, se eu representar por & o "lixo":

maçã -> ma&c&a

depois foi só copiar os caracteres que interessam para outra string.

ma&c&a -> maca

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.