Acentuação de caracteres em C com locale.h

Localização de programas e acentuação em C com o arquivo de cabeçalho locale.h

Por Eduardo Casavella

<locale.h>

Chamamos de “localizar” um programa quando fazemos a adaptação deste às características de uma determinado idioma ou de uma região.

A linguagem C utiliza o arquivo de cabeçalho locale.h para implementar a localização de programas.

Veremos dois exemplos para permitir suporte a língua portuguesa. A utilização do arquivo locale.h  e da função setlocale() configurada adequadamente vai garantir que caracteres como “ç” e acentuação sejam exibidos normalmente em nosso programa.

Exemplo prático:

Vejamos um programa-exemplo que altera a localidade para a localidade padrão do sistema operacional.

Assim, se você estiver usando um sistema operacional em português o suporte ao idioma padrão do sistema será configurado para o programa escrito em C através da função setlocale.

Vamos ao código:


#include <stdio.h>
#include <stdlib.h>
#include <locale.h> //necessário para usar setlocale

int main(void)
{
 printf("\n****** Verificando a localidade corrente ********\n\n");
 printf ("Localidade corrente: %s\n", setlocale(LC_ALL,NULL) );
 printf("Não é possível usar acentuação ou ç corretamente...\n\n");

 printf("\n****** Alterando para a localidade do sistema ********\n\n");

 //alterando para o padrão do sistema operacional
 printf("A localidade corrente agora é %s \n",setlocale(LC_ALL,""));
 printf("Agora não tem mais problema algum!\n");
 printf("Já posso usar acentuação e também o caracter ç...\n\n\n");

  system("pause");
  return 0;
}

Tela de execução:

1

Também é possível configurar o idioma português da seguinte forma:

setlocale(LC_ALL, “Portuguese”);

Vejamos um segundo exemplo.


#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void)
{
  setlocale(LC_ALL, "Portuguese");
  printf("Utilizando caracteres e acentuação da língua portuguesa!\n\n");

  system("pause");
  return 0;
}

Tela de execução:

2

Conhecendo a função setlocale do arquivo de cabeçalho locale.h

Utilizamos a função setlocale() para fazer a adaptação do programa ao idioma desejado.

Esta adaptação trata de informações sobre a apresentação de alguns dados, tais como:

– Caracteres e acentuação específicos do idioma.

– Formato de números e valores monetários

– Formatação de data e hora

Um programa escrito em C é iniciado com a localização-padrão “C” de acordo com o padrão ISO. Esta localização é uma localização “neutra” e contém informações mínimas a fim de proporcionar uma execução consistente independente do ambiente.

Em alguns casos é necessário alterar a localização-padrão “C” para adequar-se ao formato do idioma ou representações específicas de datas e horas.

A função setlocale pode ser usada para modificar essa localização para outra desejada e que seja adequada ao idioma usado no programa.

Vamos analisar mais detalhadamente a sintaxe da função.

Sintaxe:

setlocale(int categoria, const char *local)

onde:

categoria é a categoria a ser modificada ou consultada.

local é uma string que vai corresponder a uma localidade que será atribuída a uma categoria representada pelo argumento categoria.

Sendo que:

A string “C” corresponde à localidade padrão.

A string “” corresponde a localidade de uso corrente do sistema operacional.

NULL faz a consulta do valor atual da localidade estabelecida para a categoria do primeiro argumento da função

Para utilizar a localidade especificada pelo sistema operacional usamos a função setlocale() da seguinte forma:

set locale(LC_ALL,“”) onde LC_ALL faz referência à todos os aspectos da localização.

Como a função foi usada com a string “” a localização foi configurada com o padrão do sistema operacional.

Esta opção é interessante pois é mais portável já que funciona bem em qualquer sistema operacional.

É possível escolher uma localidade especificando diretamente o nome da mesma, porém é importante notar que diferentes sistemas operacionais usam diferentes formas para lidar com localidades. Devido a este fato o código torna-se menos portável ao optar por esta forma mais específica.

Por exemplo: no Windows 7 e também no Windows 8 a localidade brasileira é dada por: “Portuguese_Brasil.1252”, porém no Linux para fazer referência à localidade brasileira devemos usar “pt_BR_utf8”.

Até a próxima!

5 respostas a Acentuação de caracteres em C com locale.h