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:
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:
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!
8 respostas a Acentuação de caracteres em C com locale.h