SQLplus e Oracle, má exibição UTF-8

4

Eu configurei

export NLS_LANG=Italian_ITALY.UTF8

o db está em UTF-8

SELECT * FROM NLS_DATABASE_PARAMETERS
NLS_CHARACTERSET                                                            |AL32UTF8

Mas o sqlplus exibe os caracteres ruins ò à ì .

select titolo from generale where titolo like '%%Roma d%%';

TITOLO
------------------------------------------------------------
Roma drogata: la polizia non pu�� intervenire

deve ser

select titolo from generale where titolo like '%%Roma d%%';

TITOLO
------------------------------------------------------------
Roma drogata: la polizia non può intervenire

Eu tentei o cliente AIX e Linux, tudo em UTF-8.

O que eu sinto falta?

    
por elbarna 19.05.2015 / 23:00

2 respostas

1

A pergunta não menciona as configurações reais de localidade. Segundo a Oracle, NLS_LANG deve ser definido para corresponder a eles. Se a sua localidade real não estivesse usando o UTF-8, você obteria o caractere de substituição conforme mostrado na pergunta.

Leitura adicional:

How to setup the NLS_LANG Properly for UNIX

To specify the locale behavior of your client Oracle software, you have to set your NLS_LANG parameter. It sets the language, territory and also the character set of your client. You need to check the locale environment settings to set your NLS_LANG 3rd field (character set) in accordance with it. To do this, use the "locale" command like this:

7- Do the Locale and NLS_LANG need to match the database character set?
No, the Locale and NLS_LANG setting (and if applicable the telnet/ssh config) need to match, but they are ALL technically unrelated to the database character set and they are only relevant for that client environment.

    
por 21.10.2016 / 23:30
1

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 ò .

    
por 30.05.2018 / 15:28