Tem certeza de que o texto no banco de dados tem os caracteres corretos? Em outras palavras, você verificou que não foi danificado no caminho para o banco de dados? Você pode canalizar a saída de sqlplus
para od -t x1z
e usá-la para verificar se o banco de dados está exibindo a codificação correta ou não. Se a codificação estiver correta, a falha está em outro lugar.
As configurações que você mostrou confirmam que o banco de dados e o cliente Oracle devem ser configurados com êxito para usar o UTF-8. Em seguida, assim que os caracteres forem gerados pelo cliente Oracle (por exemplo, sqlplus
), eles serão manipulados pelo sistema operacional.
Não está claro se você usou o comando locale
para verificar as configurações de localidade do sistema operacional - mas suponho que você tenha.
Você também verificou as configurações de stty
? Se essas configurações não forem limpas em 8 bits, qualquer caractere UTF-8 será danificado em trânsito. Mas também não se parece com esse problema: A codificação UTF-8 para ò
é 0xc3 0xb2; se o bit mais alto for forçado para 0, isso se tornará 0x43 0x32, ou C maiúsculo e número 2 - ambos os caracteres UTF-8 válidos.
A próxima coisa que irá processar os personagens é o seu emulador de terminal : normalmente, isso pode ser PuTTY se você estiver usando o Windows. Versões muito antigas do PuTTY (0.62 e anteriores) usavam o conjunto de caracteres ISO-8859-1 por padrão; versões mais recentes usam UTF-8 por padrão, a menos que você tenha especificamente escolhido o contrário e salvo novas configurações padrão.
O fato de o único ò
ser mapeado para dois caracteres sugere que seu emulador de terminal não está configurado para UTF-8, mas sim algum conjunto de caracteres que usa caracteres de byte único.
Ele pode até mesmo ser configurado para esperar ASCII direto, já que parece substituir os dois bytes do UTF-8 ò
por um símbolo que indica um caractere desconhecido. Portanto, o emulador de terminal não está esperando caracteres fora do conjunto ASCII de 7 bits, ou a fonte que está usando atualmente não possui as formas de letras (glifos) correspondentes aos bytes 0xc3 e 0xb2.
Então, você precisará corrigir duas coisas nas configurações do emulador de terminal:
Primeiro, você deve configurá-lo para esperar o conjunto de caracteres UTF-8 em vez do que está esperando no momento. Uma vez que você tenha feito isso com sucesso, a letra ò
deve mapear para apenas um um caractere, não dois. Pode ou não ser o caractere correto , mas o importante é que apenas um caractere seja exibido, não dois.
Se o caractere exibido ainda não estiver correto, você deve verificar se a fonte que você está usando com o emulador de terminal realmente tem o glifo para ò
.