Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Cobra

Passagem de parâmetros com acentuação

Recommended Posts

Bom dia.

 

Estou tendo problemas com a passagem de parâmetros para uma aplicação de relatórios (no OC4J) que gera arquivos PDF. Quando chamo a URL por algo como http://endereco/?param=grêmio, a palavra "grêmio" é impressa como "gr?mio", ou seja, os caracteres especiais são substituídos por um ponto de interrogação.

No entanto, se eu chamar o relatório utilizando código hexadecimal UTF-8 no lugar dos caracteres especiais, como http://endereco/?param=gr%C3%8Amio, funciona perfeitamente.

 

Alguém sabe como corrigir isso? Eu chamo o relatório através de uma aplicação feita em PL/SQL, por isso, me ajudaria se existisse alguma função de PL (que eu desconheço) que consiga fazer essa substituição automaticamente.

 

Grato desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que isto seja pela opção de linguagem do Banco.

 

Mas aqui vai uma function que remove acentos

 

CREATE OR REPLACE FUNCTION REMOVE_ACENTOS (pValue IN VARCHAR2)
  RETURN  VARCHAR2 IS
-- Remove Acentos de uma string
--se alterar o paramentro para 0 ira descartar o ponto
ComAcento VARCHAR2(35);
SemAcento VARCHAR2(35);
Saida     VARCHAR2(2000);
BEGIN
    ComAcento := 'àâêôûãõáéíóúçüñÀÂÊÔÛÃÕÁÉÍÓÚÇÜÑ';
    SemAcento := 'aaeouaoaeioucunAAEOUAOAEIOUCUN';
    Saida := '';
    If Length(pValue) > 0 then
      For x in 1..Length(pValue)
      Loop
        if Instr(ComAcento,Substr(pValue,x,1)) > 0 then
          Saida := Saida || Substr(SemAcento,(Instr(ComAcento,Substr(pValue,x,1))),1);
        else
          Saida := Saida || Substr(pValue,x,1);
        end if;
      End Loop;
    End If;
    RETURN Saida;
END; -- Function REMOVE_ACENTO
/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que isto seja pela opção de linguagem do Banco.

 

Mas aqui vai uma function que remove acentos

 

CREATE OR REPLACE FUNCTION REMOVE_ACENTOS (pValue IN VARCHAR2)
  RETURN  VARCHAR2 IS
-- Remove Acentos de uma string
--se alterar o paramentro para 0 ira descartar o ponto
ComAcento VARCHAR2(35);
SemAcento VARCHAR2(35);
Saida     VARCHAR2(2000);
BEGIN
    ComAcento := 'àâêôûãõáéíóúçüñÀÂÊÔÛÃÕÁÉÍÓÚÇÜÑ';
    SemAcento := 'aaeouaoaeioucunAAEOUAOAEIOUCUN';
    Saida := '';
    If Length(pValue) > 0 then
      For x in 1..Length(pValue)
      Loop
        if Instr(ComAcento,Substr(pValue,x,1)) > 0 then
          Saida := Saida || Substr(SemAcento,(Instr(ComAcento,Substr(pValue,x,1))),1);
        else
          Saida := Saida || Substr(pValue,x,1);
        end if;
      End Loop;
    End If;
    RETURN Saida;
END; -- Function REMOVE_ACENTO
/

Obrigado pela resposta.

 

Na realidade, imagino que o problema seja configuração do servidor, não do banco. Afinal de contas, para mostrar o parâmetro na tela eu não preciso utilizar o banco.

Sobre a função que passaste, infelizmente não me ajuda pois, além de mostrar o parâmetro na tela, eu também preciso utilizá-lo na consulta e aí tenho diversos caracteres acentuados (e há problemas com outros tipos de caracteres também) vindos do banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

È a aplicação que monta a URL ?

Qual camada faz isto ?

Pelo que entendi deveria ser montada acentuada e é montada sem, correto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

È a aplicação que monta a URL ?

Qual camada faz isto ?

Pelo que entendi deveria ser montada acentuada e é montada sem, correto ?

 

Não é bem isso.

Como falei no primeiro post, o que ocorre é que, quando eu chamo o relatório pelo endereço http://endereco?param1=grêmio, o parâmetro "param1" é impresso (no relatório) como "gr?mio", por causa do caracter especial (no caso, a letra e com acento circunflexo). No entanto, se eu chamar o relatório pelo endereço http://endereco?param1=gr%C3%8Amio, o parâmetro é impresso corretamente (%C3%8A é a representação da letra ê na tabela UTF8).

 

O que eu quero saber é se o Oracle possui algum comando que faça a substituição desses caracteres da forma como eu disse que imprime corretamente, pois o relatório é chamado por um procedimento em PL/SQL. Entendeu?

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.