Jump to content

Como fazer aparecer acentos na consola?


Sofia-Fonseca
 Share

Recommended Posts

Ui!

Ponto importante: tens que ter a consola configurada para o mesmo "encoding" em que está o ficheiro c original.

As strings em C, e os caracteres isolados, de tipo char (como "Olá") não estão preparados para essas modernices. Deves usar wchar_t ("wide char"). Em strings mete-lhe um L antes da primeira aspa

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

    wprintf(L"Olá\n");


Se quiseres ver os caracteres todos com "batota" e aproveitar as potencialidades do Comportamento Indefenido, podes fazer qualquer coisa

#include <stdio.h>

int main(void) {
  int j, k;
  for (j = 0; j < 256; j += 16) {
    for (k = 0; k < 16; k++) {
      printf("%d (0x%02X) ", j + k, j + k);
      putchar(j + k);
      puts("");
    }
    puts("Press ENTER for next group");
    getchar();
  }
  return 0;
}

Com este programa descobri que o "á" tem o código 160 (A0 em hexadecimal)

#include <stdio.h>
int main(void) {
  printf("Ol\xA0, Mundo!\n");
  return 0;
}

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Compara a codepage 437 com a codepage 1252

http://ascii-table.com/codepage.php?437

http://ascii-table.com/codepage.php?1252

Na 437 o 'á' está no código 160 (0xA0), na 1252 está no código 225 (0xE1); o caracter com código 225 na codepage 437 é o 'B' (beta) 😉

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

No meu windows, posso alterar os caracteres mostrados com o comando chcp

> chcp 437
Active code page: 437

>printchar 160 225
1: á
2: ß

>chcp 1252
Active code page: 1252

>printchar 160 225
1:  
2: á

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Ui!

Ponto importante: tens que ter a consola configurada para o mesmo "encoding" em que está o ficheiro c original.

As strings em C, e os caracteres isolados, de tipo char (como "Olá") não estão preparados para essas modernices. Deves usar wchar_t ("wide char"). Em strings mete-lhe um L antes da primeira aspa

...

Ok! Entendi tudo. Mas mudei o código para um que aprendi (ainda) porque o teu não deixava a consola aberta...

Fiz assim:

#include <stdio.h>
#include <conio.h>

  main() 
{
  printf("Ol\xA0, Mundo!\n");
  getch();
}

Compara a codepage 437 com a codepage 1252

...

Na 437 o 'á' está no código 160 (0xA0), na 1252 está no código 225 (0xE1); o caracter com código 225 na codepage 437 é o 'B' (beta) 😉

Como é que sabemos qual das duas tabelas devemos utilizar?

No meu windows, posso alterar os caracteres mostrados com o comando chcp

...

Isso refere-se ao DOS... Ainda só tive uma aula  sobre o assunto  ?.

Muito obrigada pelas explicações!  😁

Edit: GeSHi adicionado (pmg)

Link to comment
Share on other sites

Como é que sabemos qual das duas tabelas devemos utilizar?

Pois ... não sei 😉

Experimenta as duas. Usa a que funcionar.

Mas lembra-te que isto é "batota".

Os caracteres a as strings "normais" em C não estão preparadas para lidarem bem com caracteres "esquisitos".

A maneira correcta (e trabalhosa) de trabalhar com caracteres "esquisitos" é com "wide chars" e "wide strings" e configurar a consola para a fonte/encoding correcto.

O unicode, e o encoding utf-8, dão trabalho mas permitem tudo isso e muito mais.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
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
 Share

×
×
  • 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.