paulo1205
(usa Ubuntu)
Enviado em 18/06/2013 - 05:18h
Existem duas opções: ou se amarra todo o sistema e todos os aplicativos para usarem a mesma representação de locale (que tem quatro aspectos: idioma, região, conjunto de caracteres e codificação desse conjunto), ou você programa para o mundo real, em que máquinas e pessoas diferentes -- ou mesmo a mesma pessoa ou a mesma máquina em variados momentos e situações -- diferentes usam locales diferentes.
Para tornar um programa mais "localizável", geralmente você programa usando strings escritos numa locale "neutra" (Inglês americano, mas com um conjunto de caracteres reduzido), e usa bibliotecas que realizem as necessárias conversões de idiomas e/ou representações de caracteres (como
libintl,
iconv, ou outras de mais alto nível, como a
QObject::tr() da Qt).
Seu problema é que seu IDE estava gravando os arquivos num conjunto de caracteres específico, e o compilador estava compilando esses caracteres exatamente como eles vinham gravados no arquivo original. Se o seu terminal, em tempo de execução, não estiver configurado com o mesmo conjunto, é bem provável que não sejam exibidos corretamente, já que o programa também não chama as devidas funções de conversão. Não é
printf() que deve fazê-la, mas funções específicas para isso.
Leia sobre
iconv(3) e
gettext(3).