
paulo1205
(usa Ubuntu)
Enviado em 10/07/2020 - 01:44h
A questão não é propriamente de
locale do programa em C. Nem é uma questão simples
Nada, aliás, que diz respeito a internacionalização ou múltiplos idiomas é simples.
Pelo exemplo mostrado, parece que o problema é de interpretação do conjunto de caracteres em dois momentos distintos: na hora da compilação, por parte do compilador que está interpretando o código fonte, e no momento da execução, por parte do terminal (ou filtro que exista no Wine antes de jogar no terminal) a partir dos
bytes que o programa joga na saída.
No caso do Linux, o mais comum nas distribuições modernas é que todo o sistema seja configurado para trabalhar com codificação UTF-8 do conjunto de caracteres Unicode. No Windows, até onde eu sei, o mais comum ainda é usar conjuntos de caracteres de oito bits, e as vezes conjuntos diferentes para aplicações em GUI (por exemplo: CP-1252, que o Windows às vezes chama de “ANSI”) e aplicações no console (por exemplo: CP-437 ou CP-850).
Se o seu código fonte foi escrito no Linux, é quase certo que aquele “é” foi codificado com UTF-8, o que implica que ele foi transformado em dois
bytes. Ao ser compilado e executado no Windows, esses dois
bytes foram compreendidos como dois caracteres distintos, já que todos os caracteres são representados com apenas um
byte em todas as CPs de uso mais comum, tanto no console quanto na interface gráfica.
Eu não sei como resolver isso de modo 100% a prova de falhas. Você pode tentar programar o emulador de terminal do Windows para usar CP-65001, que é equivalente a UTF-8. Outra possibilidade é usar opções de compilação que providenciem a conversão entre o conjunto de caracteres/codificação utilizado no código fonte e o conjunto/codificação a ser usada na hora da execução (se é que existem opções que faça isso).
Existem abordagens alternativas, tais como usar diretamente no seu programa alguma biblioteca que faça conversões de conjuntos de caracteres, e você faria essas operações manualmente, a cada operação de entrada ou saída. Mas as opções anteriores são mais simples.
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)